Contenu connexe
Similaire à Les structures de données PHP5 (20)
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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