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 l...
Les tableaux à index 
Parcours par copie 
Parcours par référence 
Les tableaux à clé/valeur 
Les tableaux multidimens...
Tout peut servir de valeur comme élément d’un tableau. 
Il est possible de mettre des éléments hétérogènes ( tableau, en...
LightPath 2014© - http://www.jmrenouard.fr 
5
Raccourci d'expression while 
for (expr1; expr2; expr3) {...} 
Peut être traduit par : 
expr1; 
while (expr2) { 
... 
e...
Boucle de parcours de tableau : foreach 
Exemple avec des tableaux à index : 
$arr = array(1, 2, 3, 4); 
$i=0; 
foreach ...
Boucle de parcours de tableau : for 
Exemple avec des tableaux à index : 
$arr = array(1, 2, 3, 4); 
for($i=0;$i<count($...
Boucle de parcours par référence 
Exemple de modification de tous les éléments: 
$arr = array(1, 2, 3, 4); 
Ou $arr=[ 1,...
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 tab...
Array_keys() : renvoie un tableau des clés 
Array_key_exists(): indique si la clé est présente. 
key(): renvoie la clé ...
Boucle de parcours de tableau 
Exemple avec des tableaux à clé : 
$tab = array ("un" => 1, "deux" => 2 
"trois" => 3, "d...
Boucle de parcours par référence 
Exemple avec des tableaux à clé : 
$tab = array ("un" => 1, "deux" => 2 
"trois" => 3,...
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 
Dimensi...
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 ...
function deepCount(&$tab) { 
$nb_val=0; 
for ($i=0;$i<count($tab);$i++) { 
if(gettype($tab [$i])=="array") { $nb_val+=deep...
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érenc...
LightPath 2014© - http://www.jmrenouard.fr 
22
2 techniques par itération. 
◦Directive :Foreach 
◦Directive : For 
2 techniques par navigation/position. 
◦Directive : ...
Parcours par copie 
◦foreach ($tab as $cle => $val) { echo $val; } 
Parcours par référence 
foreach ($tab as $cle => &$...
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]...
List / each: fonctions de parcours 
$tab=array( 
"France"=>"Paris", 
"Great Britain"=>"London", 
"Belgique"=>"Brüssel"); ...
current/ key/next/ reset: fonctions de parcours 
$tab=array( 
"France"=>"Paris", 
"Great Britain"=>"London", 
"Belgique"=...
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 
Calc...
var_dump: affiche le contenu 
print_r: idem 
◦2ème paramètre: true => renvoie la chaîne de caractère 
var_export: idem ...
array_slice( $tab, indice_debut, taille); 
Dépoupage dans le tableau $tab 
A partir de l’indice $indice_debut 
Un sous...
Découpage les 2 premiers éléments 
◦array_splice( $tab, indice); 
Dépoupage des 2 derniers éléments 
◦array_splice( $tab...
array_chunk(tab, size) 
Renvoie un tableau de sous tableau de taille size contenant le contenu de tab 
3ème paramètre: ...
Insertion à la fin: 
◦$tab[]=$nouveau_element; 
◦array_push($tab, $nouveau_element); 
Insertion au début: 
◦Array_unshif...
Création d’un tableau à clé à partir 2 tableaux: 
◦array_combine($tab_clé, $tab_valeur); 
Remplissage de tableau unique:...
Insérer un élément à une position donnée 
function insert_in_array_pos($array, $pos, $value) { $result = array_merge(arra...
array_intersect ($tab1, $tab2) : intersection 
array_diff($tab1, $tab2) : différence en bleu 
array_merge ($tab1, $tab2...
Recherche de la clé à partir de la valeur. 
◦$cle=array_search($valeur, $tab); 
Filtrage et sélection à tous les élément...
Exécution de la fonction sur chaque éléments 
Renvoi du tableau résultat 
Array_map($cb_function, $tab, $param) 
Appli...
Inversion d’un tableau: 
◦Array_reverse($tab); 
Mélange d’un tableau 
◦Array_shuffle($tab); 
Tirage au sort aléatoire d...
Array_flip($tab) 
Les clés deviennent les valeurs. 
Les valeurs deviennent les clés 
Seule la dernière valeur fait off...
Réduire un tableau à une valeur 
◦Array_reduce($tab, $cb_function, $initValeur); 
Remplacement de valeur 
◦Array_replace...
Tri de clé: ksort($tab) 
Tri par valeur: sort($tab) 
Tri inverse par valeur: rsort($tab) 
Tri inverse par clé: rksort(...
Remplissage : array_fill() 
Somme : array_sum() 
Différence : array_diff() 
Intersection : array_intersect() 
Union :...
Renversemment des valeurs : array_reverse() 
Mélange d'élément : array_shuffle() 
Recherche d'élément : in_array() 
Dé...
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...
Soit le tableau des comptes des enfants: 
$tab=array( 
"Pierre" => array("age"=> 18, "montant"=>100), 
"Louis" => array("...
Break: fin de toutes les boucles. 
Break dans une boucle while, for, foreach 
◦Fin d'itération. 
◦Sortie de boucle 
Idé...
foreach($tab as $fils => $info) { 
if ($info['age']<18) { 
echo "$fils est le premier mineur"; 
break; 
} 
} 
LightPath 20...
Continue: fin de la boucle courante. 
Continue dans une bloucle : 
◦Terminaison de la boucle courante 
◦Passage à la bou...
foreach($tab as $fils => &$info) { 
if ($info['age']<18) continue; 
echo "$fils est majeur"; 
$info['montant']+=100; 
} 
L...
LightPath: 
◦Société de conseil et d’ingénierie 
◦Formations, Conseil, Audit et mise en oeuvre 
◦jmrenouard@lightpath.fr ...
Prochain SlideShare
Chargement dans…5
×

Les structures de données PHP5

678 vues

Publié le

Présentation des structures de données en PHP5

Publié dans : Ingénierie
2 commentaires
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
678
Sur SlideShare
0
Issues des intégrations
0
Intégrations
159
Actions
Partages
0
Téléchargements
20
Commentaires
2
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Les structures de données PHP5

  1. 1. Jean-Marie Renouard LightPath 2014©
  2. 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. 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. 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. 5. LightPath 2014© - http://www.jmrenouard.fr 5
  6. 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. 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. 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. 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. 10. LightPath 2014© - http://www.jmrenouard.fr 10
  11. 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. 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. 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. 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. 15. LightPath 2014© - http://www.jmrenouard.fr 15
  16. 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. 17. LightPath 2014© - http://www.jmrenouard.fr 17
  18. 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. 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. 20. LightPath 2014© - http://www.jmrenouard.fr 20
  21. 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. 22. LightPath 2014© - http://www.jmrenouard.fr 22
  23. 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. 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. 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. 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. 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. 28. LightPath 2014© - http://www.jmrenouard.fr 28
  29. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 46. LightPath 2014© - http://www.jmrenouard.fr 46
  47. 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. 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. 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. 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. 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. 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. 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

×