Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Les structures de données PHP5

1,039 views

Published on

Présentation des structures de données en PHP5

Published in: Engineering
  • Be the first to like this

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

×