SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
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

PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
mazenovi
 

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 (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 - get started
PHP - get startedPHP - get started
PHP - get started
mazenovi
 
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
Horacio Gonzalez
 

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
 

Dernier

conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
mansouriahlam
 

Dernier (7)

optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 

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