SlideShare une entreprise Scribd logo
Jean-Marie Renouard 
LightPath 2014©
Le logo PHP est du domaine public 
http://commons.wikimedia.org/wiki/File:PHP-logo.svg 
Ce document est licencié sous licence 
◦Attribution-NonCommercial-ShareAlike 
◦CC BY-NC-SA 
Plus de détails: 
http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ 
LightPath 2014© - http://www.jmrenouard.fr 
2
Les tableaux à index 
Parcours par copie 
Parcours par référence 
Les tableaux à clé/valeur 
Les tableaux multidimensionnels 
Les tableaux de référence 
Les parcours de tableaux 
Opérations sur tableau 
Les ruptures de parcours 
LightPath 2014© - http://www.jmrenouard.fr 
3
Tout peut servir de valeur comme élément d’un tableau. 
Il est possible de mettre des éléments hétérogènes ( tableau, entier, chaîne,..) dans un même tableau. 
Principe de clé/valeur 
Nombreuses fonctions de gestion des tableaux. 
LightPath 2014© - http://www.jmrenouard.fr 
4
LightPath 2014© - http://www.jmrenouard.fr 
5
Raccourci d'expression while 
for (expr1; expr2; expr3) {...} 
Peut être traduit par : 
expr1; 
while (expr2) { 
... 
expr3; } 
LightPath 2014© - http://www.jmrenouard.fr 
6
Boucle de parcours de tableau : foreach 
Exemple avec des tableaux à index : 
$arr = array(1, 2, 3, 4); 
$i=0; 
foreach ($arr as $value) { 
echo “$arr[“.$i.”]=“.$value; 
$i++; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
7
Boucle de parcours de tableau : for 
Exemple avec des tableaux à index : 
$arr = array(1, 2, 3, 4); 
for($i=0;$i<count($arr);$i++) { 
echo “$arr[“.$i.”]=“.$arr[$i]; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
8
Boucle de parcours par référence 
Exemple de modification de tous les éléments: 
$arr = array(1, 2, 3, 4); 
Ou $arr=[ 1, 2, 3, 4];// PHP 5.4 
foreach ($arr as &$value) { 
$value = $value * 2; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
9
LightPath 2014© - http://www.jmrenouard.fr 
10
2 types de clés possibles: 
◦Entier : tableau à index 
◦Chaîne de caractère: clé d’index. 
La clé est unique dans le tableau 
Il ne peut y avoir 2 valeurs pour une même clé. 
L’unique point d’entrée vers une valeur unique. 
LightPath 2014© - http://www.jmrenouard.fr 
11
Array_keys() : renvoie un tableau des clés 
Array_key_exists(): indique si la clé est présente. 
key(): renvoie la clé courante 
LightPath 2014© - http://www.jmrenouard.fr 
12
Boucle de parcours de tableau 
Exemple avec des tableaux à clé : 
$tab = array ("un" => 1, "deux" => 2 
"trois" => 3, "dix-sept" => 17 ); 
$tab=["un" => 1, "deux" => 2 
"trois" => 3, "dix-sept" => 17];// PHP 5.4 
foreach ($tab as $cle => $val) { 
echo "$tab[$cle] => $val.n"; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
13
Boucle de parcours par référence 
Exemple avec des tableaux à clé : 
$tab = array ("un" => 1, "deux" => 2 
"trois" => 3, "dix-sept" => 17 ); 
$tab=["un" => 1, "deux" => 2 
"trois" => 3, "dix-sept" => 17];// PHP 5.4 
foreach ($tab as $cle => &$val) { 
$val*=2; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
14
LightPath 2014© - http://www.jmrenouard.fr 
15
Tableau contenant des tableaux 
◦Résultat de recherche en base de données 
Dimension 1: les lignes de résultat 
Dimension 2: les n-uplets de valeur de tableaux 
◦Classement de données par tags ou label 
LightPath 2014© - http://www.jmrenouard.fr 
16
LightPath 2014© - http://www.jmrenouard.fr 
17
Traitement récursif: 
◦Appel d’une fonction à elle-même pour traiter les sous éléments. 
Exemples: 
◦Traitement de tous les éléments d’un tableau 
◦Comptage 
◦Recherche d’élément en profondeur 
◦Sérialisation de données 
LightPath 2014© - http://www.jmrenouard.fr 
18
function deepCount(&$tab) { 
$nb_val=0; 
for ($i=0;$i<count($tab);$i++) { 
if(gettype($tab [$i])=="array") { $nb_val+=deepCount(&$tab[$i]); 
} else { $nb_val++; } 
} 
return nb_val; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
19
LightPath 2014© - http://www.jmrenouard.fr 
20
Possibilité de parcours par référence 
foreach ($tab as $cle => &$val) { $val*=2; } 
Possibilité de stocker des références 
$chaine=« toto »; 
$tab[]=&$chaine; 
$chaine et $tab[0] sont maintenant liés. 
LightPath 2014© - http://www.jmrenouard.fr 
21
LightPath 2014© - http://www.jmrenouard.fr 
22
2 techniques par itération. 
◦Directive :Foreach 
◦Directive : For 
2 techniques par navigation/position. 
◦Directive : Each/list 
◦Directive : Current/next 
LightPath 2014© - http://www.jmrenouard.fr 
23
Parcours par copie 
◦foreach ($tab as $cle => $val) { echo $val; } 
Parcours par référence 
foreach ($tab as $cle => &$val) { $val*=2; } 
La plus utilisée. 
LightPath 2014© - http://www.jmrenouard.fr 
24
Il s’agit de boucler sur le tableau des clés. 
$cles=array_keys($tab); 
for ($i=0;$i<count($cles);$i++) { 
$cle=$cles[$i]; 
echo « n * tab [» .$cle. »]=« .$tab[$cle]; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
25
List / each: fonctions de parcours 
$tab=array( 
"France"=>"Paris", 
"Great Britain"=>"London", 
"Belgique"=>"Brüssel"); 
$tab=["France"=>"Paris« ,"Great Britain"=>"London« ,"Belgique"=>"Brüssel" ]; //PHP5.4 
while(list($cle,$valeur) = each($tab) ) { 
echo "clé <b>$cle</b> / valeur <b>$valeur</b> <br>"; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
26
current/ key/next/ reset: fonctions de parcours 
$tab=array( 
"France"=>"Paris", 
"Great Britain"=>"London", 
"Belgique"=>"Brüssel"); 
$tab=["France"=>"Paris« ,"Great Britain"=>"London« ,"Belgique"=>"Brüssel" ]; //PHP5.4 
reset($tab); 
while( $val = current($tab) ) { 
echo "L'élément de clé <b>".key($tab). 
"</b> a la valeur <b>$val</b> <br>"; 
next($tab); 
} 
LightPath 2014© - http://www.jmrenouard.fr 
27
LightPath 2014© - http://www.jmrenouard.fr 
28
Affichage d’un tableau 
Insertion et Insertion à la position 
Découpe en sous-tableau 
Tronçonnage d’un tableau 
Calcul des différences, intersections et fusion 
Recherches diverses 
Manipulation de tous les éléments 
Renversement, mélange et recherche aléatoire 
Inversement clé/valeur 
Remplacement de valeur 
Tri multi-tableau 
LightPath 2014© - http://www.jmrenouard.fr 
29
var_dump: affiche le contenu 
print_r: idem 
◦2ème paramètre: true => renvoie la chaîne de caractère 
var_export: idem 
◦2ème paramètre: true => renvoie la chaîne de caractère 
serialize: sérialise en texte une variable 
LightPath 2014© - http://www.jmrenouard.fr 
30
array_slice( $tab, indice_debut, taille); 
Dépoupage dans le tableau $tab 
A partir de l’indice $indice_debut 
Un sous-tableau de taille taille. 
Ne pas confondre avec array_splice 
LightPath 2014© - http://www.jmrenouard.fr 
31
Découpage les 2 premiers éléments 
◦array_splice( $tab, indice); 
Dépoupage des 2 derniers éléments 
◦array_splice( $tab, indice, -indice); 
LightPath 2014© - http://www.jmrenouard.fr 
32
array_chunk(tab, size) 
Renvoie un tableau de sous tableau de taille size contenant le contenu de tab 
3ème paramètre: réinitialise l’indice des éléments de chaque tableau 
LightPath 2014© - http://www.jmrenouard.fr 
33
Insertion à la fin: 
◦$tab[]=$nouveau_element; 
◦array_push($tab, $nouveau_element); 
Insertion au début: 
◦Array_unshift($tab, $nouveau_element); 
Array_pop / array_shift: dépiler le tableau 
LightPath 2014© - http://www.jmrenouard.fr 
34
Création d’un tableau à clé à partir 2 tableaux: 
◦array_combine($tab_clé, $tab_valeur); 
Remplissage de tableau unique: 
◦Array_fill($tab, indice, taille, valeur) 
Remplissage de tableau de valeur entière 
◦range(1,100) 
Remplissage de tableau 
◦array_pad($tab, taille, valeur par défaut) 
LightPath 2014© - http://www.jmrenouard.fr 
35
Insérer un élément à une position donnée 
function insert_in_array_pos($array, $pos, $value) { $result = array_merge(array_slice($array, 0 , $pos), array($value), array_slice($array, $pos)); return $result; } 
Autres solutions: 
array_splice($array, $pos, 0, $value); 
LightPath 2014© - http://www.jmrenouard.fr 
36
array_intersect ($tab1, $tab2) : intersection 
array_diff($tab1, $tab2) : différence en bleu 
array_merge ($tab1, $tab2) : la fusion(E) 
LightPath 2014© - http://www.jmrenouard.fr 
37
Recherche de la clé à partir de la valeur. 
◦$cle=array_search($valeur, $tab); 
Filtrage et sélection à tous les éléments: 
◦array_filter( $tab, $cb_fonction); 
Recherche de clé: 
◦array_key_exists($clé, $tab) 
Recherche de valeur 
◦in_array($val, $tab) 
LightPath 2014© - http://www.jmrenouard.fr 
38
Exécution de la fonction sur chaque éléments 
Renvoi du tableau résultat 
Array_map($cb_function, $tab, $param) 
Application d’une fonction sur chaque élément 
◦Array_walk($tab, $cb_function); 
LightPath 2014© - http://www.jmrenouard.fr 
39
Inversion d’un tableau: 
◦Array_reverse($tab); 
Mélange d’un tableau 
◦Array_shuffle($tab); 
Tirage au sort aléatoire dans un tableau 
◦Array_rand($tab); 
LightPath 2014© - http://www.jmrenouard.fr 
40
Array_flip($tab) 
Les clés deviennent les valeurs. 
Les valeurs deviennent les clés 
Seule la dernière valeur fait office de clé finale. 
LightPath 2014© - http://www.jmrenouard.fr 
41
Réduire un tableau à une valeur 
◦Array_reduce($tab, $cb_function, $initValeur); 
Remplacement de valeur 
◦Array_replace($tab, $rempTab1, …) 
Remplacement de valeur récursivement 
◦Array_replace_recurcive($tab, $rempTab1, …) 
LightPath 2014© - http://www.jmrenouard.fr 
42
Tri de clé: ksort($tab) 
Tri par valeur: sort($tab) 
Tri inverse par valeur: rsort($tab) 
Tri inverse par clé: rksort($tab) 
Tri des éléments uniques: 
◦array_unique($tab) 
Multitris 
◦Array_multisort($tab, $opt, $tab1, …) 
LightPath 2014© - http://www.jmrenouard.fr 
43
Remplissage : array_fill() 
Somme : array_sum() 
Différence : array_diff() 
Intersection : array_intersect() 
Union : array_push() 
Application de fonction : array_walk() 
Filtrage : array_filter() 
LightPath 2014© - http://www.jmrenouard.fr 
44
Renversemment des valeurs : array_reverse() 
Mélange d'élément : array_shuffle() 
Recherche d'élément : in_array() 
Dédoublonnage de valeurs : array_unique() 
Découpage de portion : array_splice() 
Découpage en sous-tableau: array_chunk() 
Découpage de chaîne : explode() 
Fusion d'un tableau : implode() 
LightPath 2014© - http://www.jmrenouard.fr 
45
LightPath 2014© - http://www.jmrenouard.fr 
46
Instructions d'altération de boucle 
Il est parfois nécessaire d’arrêter une boucle. 
2 instructions majeures: break et continue 
Cassure de boucle: for, foreach ou while 
Rupture de la 1ère boucle courante. 
Pas de propagation aux autres boucles. 
LightPath 2014© - http://www.jmrenouard.fr 
47
Soit le tableau des comptes des enfants: 
$tab=array( 
"Pierre" => array("age"=> 18, "montant"=>100), 
"Louis" => array("age"=> 10, "montant"=>50), 
"Benjamin" => array("age"=> 20, "montant"=>200), 
"Luc" => array("age"=> 25, "montant"=>550), 
"Marc" => array("age"=> 8, "montant"=>30), 
); 
PHP 5.4 uniquement 
$tab=[ 
"Pierre" => ["age"=> 18, "montant"=>100], 
"Louis" => ["age"=> 10, "montant"=>50], 
"Benjamin" => ["age"=> 20, "montant"=>200], 
"Luc" => ["age"=> 25, "montant"=>550], 
"Marc" => ["age"=> 8, "montant"=>30], 
]; 
LightPath 2014© - http://www.jmrenouard.fr 
48
Break: fin de toutes les boucles. 
Break dans une boucle while, for, foreach 
◦Fin d'itération. 
◦Sortie de boucle 
Idéal pour la recherche du premier élément correspondant à un critère quelconque. 
LightPath 2014© - http://www.jmrenouard.fr 
49
foreach($tab as $fils => $info) { 
if ($info['age']<18) { 
echo "$fils est le premier mineur"; 
break; 
} 
} 
LightPath 2014© - http://www.jmrenouard.fr 
50
Continue: fin de la boucle courante. 
Continue dans une bloucle : 
◦Terminaison de la boucle courante 
◦Passage à la boucle suivante 
Idéal pour scunter, bypasser ou court-circuiter un ensemble d’instructions inutiles. 
Évite l’utilisation d’un bloc if. 
LightPath 2014© - http://www.jmrenouard.fr 
51
foreach($tab as $fils => &$info) { 
if ($info['age']<18) continue; 
echo "$fils est majeur"; 
$info['montant']+=100; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
52
LightPath: 
◦Société de conseil et d’ingénierie 
◦Formations, Conseil, Audit et mise en oeuvre 
◦jmrenouard@lightpath.fr 
Jean-Marie RENOUARD 
◦jmrenouard@gmail.com 
◦Twitter: @jmrenouard 
◦http://www.jmrenouard.fr 
LightPath 2014© - http://www.jmrenouard.fr 
53

Contenu connexe

Tendances

Client base de données en PHP5
Client base de données en PHP5Client base de données en PHP5
Client base de données en PHP5
Jean-Marie Renouard
 
Fichier XML et PHP5
Fichier XML et PHP5Fichier XML et PHP5
Fichier XML et PHP5
Jean-Marie Renouard
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
Jean-Marie Renouard
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
Club Scientifique de l'ESI - CSE
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
zan
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
Engineor
 
Cours php
Cours phpCours php
Cours php
csskaled
 
Php1
Php1Php1
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
Abdoulaye Dieng
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
halleck45
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
kemenaran
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
Pierre Faure
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
Eddy RICHARD
 

Tendances (20)

Client base de données en PHP5
Client base de données en PHP5Client base de données en PHP5
Client base de données en PHP5
 
Fichier XML et PHP5
Fichier XML et PHP5Fichier XML et PHP5
Fichier XML et PHP5
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Cours php
Cours phpCours php
Cours php
 
Php1
Php1Php1
Php1
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Cours php
Cours phpCours php
Cours php
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 

En vedette

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
Jean-Marie Renouard
 
Configuration PHP5
Configuration PHP5Configuration PHP5
Configuration PHP5
Jean-Marie Renouard
 
PHP5 et les fichiers
PHP5 et les fichiersPHP5 et les fichiers
PHP5 et les fichiers
Jean-Marie Renouard
 
Manuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur LinuxManuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur Linux
Jean-Marie Renouard
 
Ssh cookbook
Ssh cookbookSsh cookbook
Ssh cookbook
Jean-Marie Renouard
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
Jean-Marie Renouard
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
Jean-Marie Renouard
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
Mickael Couzinet
 

En vedette (8)

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
 
Configuration PHP5
Configuration PHP5Configuration PHP5
Configuration PHP5
 
PHP5 et les fichiers
PHP5 et les fichiersPHP5 et les fichiers
PHP5 et les fichiers
 
Manuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur LinuxManuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur Linux
 
Ssh cookbook
Ssh cookbookSsh cookbook
Ssh cookbook
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 

Similaire à Les structures de données PHP5

Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
neuros
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
Damien Seguy
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
eric German
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear php
Damien Seguy
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
halleck45
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
Damien Seguy
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
borhen boukthir
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreaming
David Morel
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_Form
Mickael Perraud
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
Régis Lutter
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024
YounesOuladSayad1
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Normandy JUG
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
5pidou
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovyHoracio Gonzalez
 
Initiation au php
Initiation au phpInitiation au php
Initiation au php
StrasWeb
 
Initiation au php
Initiation au phpInitiation au php
Initiation au php
Cédric Leclinche
 

Similaire à Les structures de données PHP5 (20)

Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear php
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreaming
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_Form
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
test doc
test doctest doc
test doc
 
Enib cours c.a.i. web - séance #5 - groovy
Enib   cours c.a.i. web - séance #5 - groovyEnib   cours c.a.i. web - séance #5 - groovy
Enib cours c.a.i. web - séance #5 - groovy
 
Initiation au php
Initiation au phpInitiation au php
Initiation au php
 
Initiation au php
Initiation au phpInitiation au php
Initiation au php
 

Les structures de données PHP5

  • 2. Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
  • 3. Les tableaux à index Parcours par copie Parcours par référence Les tableaux à clé/valeur Les tableaux multidimensionnels Les tableaux de référence Les parcours de tableaux Opérations sur tableau Les ruptures de parcours LightPath 2014© - http://www.jmrenouard.fr 3
  • 4. Tout peut servir de valeur comme élément d’un tableau. Il est possible de mettre des éléments hétérogènes ( tableau, entier, chaîne,..) dans un même tableau. Principe de clé/valeur Nombreuses fonctions de gestion des tableaux. LightPath 2014© - http://www.jmrenouard.fr 4
  • 5. LightPath 2014© - http://www.jmrenouard.fr 5
  • 6. Raccourci d'expression while for (expr1; expr2; expr3) {...} Peut être traduit par : expr1; while (expr2) { ... expr3; } LightPath 2014© - http://www.jmrenouard.fr 6
  • 7. Boucle de parcours de tableau : foreach Exemple avec des tableaux à index : $arr = array(1, 2, 3, 4); $i=0; foreach ($arr as $value) { echo “$arr[“.$i.”]=“.$value; $i++; } LightPath 2014© - http://www.jmrenouard.fr 7
  • 8. Boucle de parcours de tableau : for Exemple avec des tableaux à index : $arr = array(1, 2, 3, 4); for($i=0;$i<count($arr);$i++) { echo “$arr[“.$i.”]=“.$arr[$i]; } LightPath 2014© - http://www.jmrenouard.fr 8
  • 9. Boucle de parcours par référence Exemple de modification de tous les éléments: $arr = array(1, 2, 3, 4); Ou $arr=[ 1, 2, 3, 4];// PHP 5.4 foreach ($arr as &$value) { $value = $value * 2; } LightPath 2014© - http://www.jmrenouard.fr 9
  • 10. LightPath 2014© - http://www.jmrenouard.fr 10
  • 11. 2 types de clés possibles: ◦Entier : tableau à index ◦Chaîne de caractère: clé d’index. La clé est unique dans le tableau Il ne peut y avoir 2 valeurs pour une même clé. L’unique point d’entrée vers une valeur unique. LightPath 2014© - http://www.jmrenouard.fr 11
  • 12. Array_keys() : renvoie un tableau des clés Array_key_exists(): indique si la clé est présente. key(): renvoie la clé courante LightPath 2014© - http://www.jmrenouard.fr 12
  • 13. Boucle de parcours de tableau Exemple avec des tableaux à clé : $tab = array ("un" => 1, "deux" => 2 "trois" => 3, "dix-sept" => 17 ); $tab=["un" => 1, "deux" => 2 "trois" => 3, "dix-sept" => 17];// PHP 5.4 foreach ($tab as $cle => $val) { echo "$tab[$cle] => $val.n"; } LightPath 2014© - http://www.jmrenouard.fr 13
  • 14. Boucle de parcours par référence Exemple avec des tableaux à clé : $tab = array ("un" => 1, "deux" => 2 "trois" => 3, "dix-sept" => 17 ); $tab=["un" => 1, "deux" => 2 "trois" => 3, "dix-sept" => 17];// PHP 5.4 foreach ($tab as $cle => &$val) { $val*=2; } LightPath 2014© - http://www.jmrenouard.fr 14
  • 15. LightPath 2014© - http://www.jmrenouard.fr 15
  • 16. Tableau contenant des tableaux ◦Résultat de recherche en base de données Dimension 1: les lignes de résultat Dimension 2: les n-uplets de valeur de tableaux ◦Classement de données par tags ou label LightPath 2014© - http://www.jmrenouard.fr 16
  • 17. LightPath 2014© - http://www.jmrenouard.fr 17
  • 18. Traitement récursif: ◦Appel d’une fonction à elle-même pour traiter les sous éléments. Exemples: ◦Traitement de tous les éléments d’un tableau ◦Comptage ◦Recherche d’élément en profondeur ◦Sérialisation de données LightPath 2014© - http://www.jmrenouard.fr 18
  • 19. function deepCount(&$tab) { $nb_val=0; for ($i=0;$i<count($tab);$i++) { if(gettype($tab [$i])=="array") { $nb_val+=deepCount(&$tab[$i]); } else { $nb_val++; } } return nb_val; } LightPath 2014© - http://www.jmrenouard.fr 19
  • 20. LightPath 2014© - http://www.jmrenouard.fr 20
  • 21. Possibilité de parcours par référence foreach ($tab as $cle => &$val) { $val*=2; } Possibilité de stocker des références $chaine=« toto »; $tab[]=&$chaine; $chaine et $tab[0] sont maintenant liés. LightPath 2014© - http://www.jmrenouard.fr 21
  • 22. LightPath 2014© - http://www.jmrenouard.fr 22
  • 23. 2 techniques par itération. ◦Directive :Foreach ◦Directive : For 2 techniques par navigation/position. ◦Directive : Each/list ◦Directive : Current/next LightPath 2014© - http://www.jmrenouard.fr 23
  • 24. Parcours par copie ◦foreach ($tab as $cle => $val) { echo $val; } Parcours par référence foreach ($tab as $cle => &$val) { $val*=2; } La plus utilisée. LightPath 2014© - http://www.jmrenouard.fr 24
  • 25. Il s’agit de boucler sur le tableau des clés. $cles=array_keys($tab); for ($i=0;$i<count($cles);$i++) { $cle=$cles[$i]; echo « n * tab [» .$cle. »]=« .$tab[$cle]; } LightPath 2014© - http://www.jmrenouard.fr 25
  • 26. List / each: fonctions de parcours $tab=array( "France"=>"Paris", "Great Britain"=>"London", "Belgique"=>"Brüssel"); $tab=["France"=>"Paris« ,"Great Britain"=>"London« ,"Belgique"=>"Brüssel" ]; //PHP5.4 while(list($cle,$valeur) = each($tab) ) { echo "clé <b>$cle</b> / valeur <b>$valeur</b> <br>"; } LightPath 2014© - http://www.jmrenouard.fr 26
  • 27. current/ key/next/ reset: fonctions de parcours $tab=array( "France"=>"Paris", "Great Britain"=>"London", "Belgique"=>"Brüssel"); $tab=["France"=>"Paris« ,"Great Britain"=>"London« ,"Belgique"=>"Brüssel" ]; //PHP5.4 reset($tab); while( $val = current($tab) ) { echo "L'élément de clé <b>".key($tab). "</b> a la valeur <b>$val</b> <br>"; next($tab); } LightPath 2014© - http://www.jmrenouard.fr 27
  • 28. LightPath 2014© - http://www.jmrenouard.fr 28
  • 29. Affichage d’un tableau Insertion et Insertion à la position Découpe en sous-tableau Tronçonnage d’un tableau Calcul des différences, intersections et fusion Recherches diverses Manipulation de tous les éléments Renversement, mélange et recherche aléatoire Inversement clé/valeur Remplacement de valeur Tri multi-tableau LightPath 2014© - http://www.jmrenouard.fr 29
  • 30. var_dump: affiche le contenu print_r: idem ◦2ème paramètre: true => renvoie la chaîne de caractère var_export: idem ◦2ème paramètre: true => renvoie la chaîne de caractère serialize: sérialise en texte une variable LightPath 2014© - http://www.jmrenouard.fr 30
  • 31. array_slice( $tab, indice_debut, taille); Dépoupage dans le tableau $tab A partir de l’indice $indice_debut Un sous-tableau de taille taille. Ne pas confondre avec array_splice LightPath 2014© - http://www.jmrenouard.fr 31
  • 32. Découpage les 2 premiers éléments ◦array_splice( $tab, indice); Dépoupage des 2 derniers éléments ◦array_splice( $tab, indice, -indice); LightPath 2014© - http://www.jmrenouard.fr 32
  • 33. array_chunk(tab, size) Renvoie un tableau de sous tableau de taille size contenant le contenu de tab 3ème paramètre: réinitialise l’indice des éléments de chaque tableau LightPath 2014© - http://www.jmrenouard.fr 33
  • 34. Insertion à la fin: ◦$tab[]=$nouveau_element; ◦array_push($tab, $nouveau_element); Insertion au début: ◦Array_unshift($tab, $nouveau_element); Array_pop / array_shift: dépiler le tableau LightPath 2014© - http://www.jmrenouard.fr 34
  • 35. Création d’un tableau à clé à partir 2 tableaux: ◦array_combine($tab_clé, $tab_valeur); Remplissage de tableau unique: ◦Array_fill($tab, indice, taille, valeur) Remplissage de tableau de valeur entière ◦range(1,100) Remplissage de tableau ◦array_pad($tab, taille, valeur par défaut) LightPath 2014© - http://www.jmrenouard.fr 35
  • 36. Insérer un élément à une position donnée function insert_in_array_pos($array, $pos, $value) { $result = array_merge(array_slice($array, 0 , $pos), array($value), array_slice($array, $pos)); return $result; } Autres solutions: array_splice($array, $pos, 0, $value); LightPath 2014© - http://www.jmrenouard.fr 36
  • 37. array_intersect ($tab1, $tab2) : intersection array_diff($tab1, $tab2) : différence en bleu array_merge ($tab1, $tab2) : la fusion(E) LightPath 2014© - http://www.jmrenouard.fr 37
  • 38. Recherche de la clé à partir de la valeur. ◦$cle=array_search($valeur, $tab); Filtrage et sélection à tous les éléments: ◦array_filter( $tab, $cb_fonction); Recherche de clé: ◦array_key_exists($clé, $tab) Recherche de valeur ◦in_array($val, $tab) LightPath 2014© - http://www.jmrenouard.fr 38
  • 39. Exécution de la fonction sur chaque éléments Renvoi du tableau résultat Array_map($cb_function, $tab, $param) Application d’une fonction sur chaque élément ◦Array_walk($tab, $cb_function); LightPath 2014© - http://www.jmrenouard.fr 39
  • 40. Inversion d’un tableau: ◦Array_reverse($tab); Mélange d’un tableau ◦Array_shuffle($tab); Tirage au sort aléatoire dans un tableau ◦Array_rand($tab); LightPath 2014© - http://www.jmrenouard.fr 40
  • 41. Array_flip($tab) Les clés deviennent les valeurs. Les valeurs deviennent les clés Seule la dernière valeur fait office de clé finale. LightPath 2014© - http://www.jmrenouard.fr 41
  • 42. Réduire un tableau à une valeur ◦Array_reduce($tab, $cb_function, $initValeur); Remplacement de valeur ◦Array_replace($tab, $rempTab1, …) Remplacement de valeur récursivement ◦Array_replace_recurcive($tab, $rempTab1, …) LightPath 2014© - http://www.jmrenouard.fr 42
  • 43. Tri de clé: ksort($tab) Tri par valeur: sort($tab) Tri inverse par valeur: rsort($tab) Tri inverse par clé: rksort($tab) Tri des éléments uniques: ◦array_unique($tab) Multitris ◦Array_multisort($tab, $opt, $tab1, …) LightPath 2014© - http://www.jmrenouard.fr 43
  • 44. Remplissage : array_fill() Somme : array_sum() Différence : array_diff() Intersection : array_intersect() Union : array_push() Application de fonction : array_walk() Filtrage : array_filter() LightPath 2014© - http://www.jmrenouard.fr 44
  • 45. Renversemment des valeurs : array_reverse() Mélange d'élément : array_shuffle() Recherche d'élément : in_array() Dédoublonnage de valeurs : array_unique() Découpage de portion : array_splice() Découpage en sous-tableau: array_chunk() Découpage de chaîne : explode() Fusion d'un tableau : implode() LightPath 2014© - http://www.jmrenouard.fr 45
  • 46. LightPath 2014© - http://www.jmrenouard.fr 46
  • 47. Instructions d'altération de boucle Il est parfois nécessaire d’arrêter une boucle. 2 instructions majeures: break et continue Cassure de boucle: for, foreach ou while Rupture de la 1ère boucle courante. Pas de propagation aux autres boucles. LightPath 2014© - http://www.jmrenouard.fr 47
  • 48. Soit le tableau des comptes des enfants: $tab=array( "Pierre" => array("age"=> 18, "montant"=>100), "Louis" => array("age"=> 10, "montant"=>50), "Benjamin" => array("age"=> 20, "montant"=>200), "Luc" => array("age"=> 25, "montant"=>550), "Marc" => array("age"=> 8, "montant"=>30), ); PHP 5.4 uniquement $tab=[ "Pierre" => ["age"=> 18, "montant"=>100], "Louis" => ["age"=> 10, "montant"=>50], "Benjamin" => ["age"=> 20, "montant"=>200], "Luc" => ["age"=> 25, "montant"=>550], "Marc" => ["age"=> 8, "montant"=>30], ]; LightPath 2014© - http://www.jmrenouard.fr 48
  • 49. Break: fin de toutes les boucles. Break dans une boucle while, for, foreach ◦Fin d'itération. ◦Sortie de boucle Idéal pour la recherche du premier élément correspondant à un critère quelconque. LightPath 2014© - http://www.jmrenouard.fr 49
  • 50. foreach($tab as $fils => $info) { if ($info['age']<18) { echo "$fils est le premier mineur"; break; } } LightPath 2014© - http://www.jmrenouard.fr 50
  • 51. Continue: fin de la boucle courante. Continue dans une bloucle : ◦Terminaison de la boucle courante ◦Passage à la boucle suivante Idéal pour scunter, bypasser ou court-circuiter un ensemble d’instructions inutiles. Évite l’utilisation d’un bloc if. LightPath 2014© - http://www.jmrenouard.fr 51
  • 52. foreach($tab as $fils => &$info) { if ($info['age']<18) continue; echo "$fils est majeur"; $info['montant']+=100; } LightPath 2014© - http://www.jmrenouard.fr 52
  • 53. LightPath: ◦Société de conseil et d’ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 53