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

PPT
Structure de données en PHP
PDF
SQL et MySQL
PDF
PHP 5 et la programmation objet
PDF
Javascript et JQuery
PDF
Syntaxe du langage PHP
PDF
Gestion de formulaires en PHP
PDF
Le client HTTP PHP5
PDF
Sécurité et Quaité de code PHP
Structure de données en PHP
SQL et MySQL
PHP 5 et la programmation objet
Javascript et JQuery
Syntaxe du langage PHP
Gestion de formulaires en PHP
Le client HTTP PHP5
Sécurité et Quaité de code PHP

Tendances (20)

PDF
Client base de données en PHP5
PDF
Fichier XML et PHP5
PDF
Programmation orientée objet en PHP 5
PDF
Le client FTP de PHP5
PPTX
php2 : formulaire-session-PDO
PDF
Php 2 - Approfondissement MySQL, PDO et MVC
PPTX
Symfony2 - Un Framework PHP 5 Performant
PPTX
Introduction au Jquery
PPTX
La première partie de la présentation PHP
PPT
Php mysql cours
 
PPT
PHP5 - POO
PDF
Open close principle, on a dit étendre, pas extends !
PPT
Cours php
PPTX
PPT
.php1 : les fondamentaux du PHP
PDF
Programmation Orientée Objet et les Traits en PHP 5.4
ODP
Formation PHP
PDF
PDF
PHP 1 - Apprendre les bases
PDF
PHP 7 et Symfony 3
Client base de données en PHP5
Fichier XML et PHP5
Programmation orientée objet en PHP 5
Le client FTP de PHP5
php2 : formulaire-session-PDO
Php 2 - Approfondissement MySQL, PDO et MVC
Symfony2 - Un Framework PHP 5 Performant
Introduction au Jquery
La première partie de la présentation PHP
Php mysql cours
 
PHP5 - POO
Open close principle, on a dit étendre, pas extends !
Cours php
.php1 : les fondamentaux du PHP
Programmation Orientée Objet et les Traits en PHP 5.4
Formation PHP
PHP 1 - Apprendre les bases
PHP 7 et Symfony 3
Publicité

En vedette (8)

PDF
Email et PHP5
PDF
Configuration PHP5
PDF
PHP5 et les fichiers
PDF
Manuel de sécurisation d'un serveur Linux
PDF
Ssh cookbook
PDF
Présentation de PHP
PDF
MVC / Frameworks PHP
PPTX
Présentation de Node.js
Email et PHP5
Configuration PHP5
PHP5 et les fichiers
Manuel de sécurisation d'un serveur Linux
Ssh cookbook
Présentation de PHP
MVC / Frameworks PHP
Présentation de Node.js
Publicité

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

PDF
Php 7 Think php7
PDF
Trucs et astuces PHP et MySQL
ODP
Ruby Pour RoR
PDF
La référence Clear php
KEY
Exploiter php 5
PDF
Résumé Complet : Les Fondamentaux du PHP et Intégration avec MySQL.pdf
PDF
Analyse statique et applications
PDF
Spark - Ippevent 19-02-2015
PDF
Cours php bac info
PDF
Utiliser Hadoop en perl avec HadoopStreaming
PPTX
ODP
Tirer parti des décorateurs de Zend_Form
PDF
Bases de PHP - Partie 1
PDF
cours developpement web javascript 2023/2024
PDF
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
PPT
PHP - get started
PDF
Quelle place pour le framework Rails dans le développement d'application web
DOCX
test doc
PDF
Enib cours c.a.i. web - séance #5 - groovy
PPTX
Initiation au php
Php 7 Think php7
Trucs et astuces PHP et MySQL
Ruby Pour RoR
La référence Clear php
Exploiter php 5
Résumé Complet : Les Fondamentaux du PHP et Intégration avec MySQL.pdf
Analyse statique et applications
Spark - Ippevent 19-02-2015
Cours php bac info
Utiliser Hadoop en perl avec HadoopStreaming
Tirer parti des décorateurs de Zend_Form
Bases de PHP - Partie 1
cours developpement web javascript 2023/2024
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
PHP - get started
Quelle place pour le framework Rails dans le développement d'application web
test doc
Enib cours c.a.i. web - séance #5 - groovy
Initiation au php

Dernier (16)

PPTX
Introduction aux Systèmes temps réel.pptx
PDF
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
PPTX
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
PPTX
Logique séquentielle : les fondamentaux
PPTX
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx
PPTX
UMAPON Cours de traitement des minerais 2.pptx
PDF
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
PPTX
mon_expose_de_geophysique_disposotif_de_wener.pptx
PDF
Regles sur la gestion de l’Eclairage public
PDF
Visite de chantier – Projet de Polyclinique à Laghouat
PDF
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
PDF
TP L’analyse granulométrique par tamisage
PDF
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
PDF
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
PDF
TP de La Masse Volumique apparente et absolue
PPTX
A Recurrent Neural Network (RNN)s a type of artificial neural network
Introduction aux Systèmes temps réel.pptx
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
Logique séquentielle : les fondamentaux
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx
UMAPON Cours de traitement des minerais 2.pptx
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
mon_expose_de_geophysique_disposotif_de_wener.pptx
Regles sur la gestion de l’Eclairage public
Visite de chantier – Projet de Polyclinique à Laghouat
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
TP L’analyse granulométrique par tamisage
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
TP de La Masse Volumique apparente et absolue
A Recurrent Neural Network (RNN)s a type of artificial neural network

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