Top Banner
Jean-Marie Renouard LightPath 2014©
53

Les structures de données PHP5

Jul 03, 2015

Download

Engineering

Présentation des structures de données en PHP5
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Les structures de données PHP5

Jean-Marie Renouard LightPath 2014©

Page 2: Les structures de données PHP5

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

Page 3: Les structures de données PHP5

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

Page 4: Les structures de données PHP5

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

Page 5: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 5

Page 6: Les structures de données PHP5

Raccourci d'expression while

for (expr1; expr2; expr3) {...}

Peut être traduit par :

expr1;

while (expr2) {

...

expr3; }

LightPath 2014© - http://www.jmrenouard.fr 6

Page 7: Les structures de données PHP5

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

Page 8: Les structures de données PHP5

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

Page 9: Les structures de données PHP5

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

Page 10: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 10

Page 11: Les structures de données PHP5

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

Page 12: Les structures de données PHP5

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

Page 13: Les structures de données PHP5

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

Page 14: Les structures de données PHP5

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

Page 15: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 15

Page 16: Les structures de données PHP5

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

Page 17: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 17

Page 18: Les structures de données PHP5

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

Page 19: Les structures de données PHP5

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

Page 20: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 20

Page 21: Les structures de données PHP5

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

Page 22: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 22

Page 23: Les structures de données PHP5

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

Page 24: Les structures de données PHP5

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

Page 25: Les structures de données PHP5

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

Page 26: Les structures de données PHP5

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

Page 27: Les structures de données PHP5

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

Page 28: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 28

Page 29: Les structures de données PHP5

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

Page 30: Les structures de données PHP5

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

Page 31: Les structures de données PHP5

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

Page 32: Les structures de données PHP5

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

Page 33: Les structures de données PHP5

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

Page 34: Les structures de données PHP5

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

Page 35: Les structures de données PHP5

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

Page 36: Les structures de données PHP5

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

Page 37: Les structures de données PHP5

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

Page 38: Les structures de données PHP5

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

Page 39: Les structures de données PHP5

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

Page 40: Les structures de données PHP5

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

Page 41: Les structures de données PHP5

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

Page 42: Les structures de données PHP5

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

Page 43: Les structures de données PHP5

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

Page 44: Les structures de données PHP5

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

Page 45: Les structures de données PHP5

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

Page 46: Les structures de données PHP5

LightPath 2014© - http://www.jmrenouard.fr 46

Page 47: Les structures de données PHP5

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

Page 48: Les structures de données PHP5

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

Page 49: Les structures de données PHP5

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

Page 50: Les structures de données PHP5

foreach($tab as $fils => $info) {

if ($info['age']<18) {

echo "$fils est le premier mineur";

break;

}

}

LightPath 2014© - http://www.jmrenouard.fr 50

Page 51: Les structures de données PHP5

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

Page 52: Les structures de données PHP5

foreach($tab as $fils => &$info) {

if ($info['age']<18) continue;

echo "$fils est majeur";

$info['montant']+=100;

}

LightPath 2014© - http://www.jmrenouard.fr 52

Page 53: Les structures de données PHP5

LightPath: ◦ Société de conseil et d’ingénierie

◦ Formations, Conseil, Audit et mise en œuvre

[email protected]

Jean-Marie RENOUARD ◦ [email protected]

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

LightPath 2014© - http://www.jmrenouard.fr 53