53
Jean-Marie Renouard LightPath 2014©

Les structures de données PHP5

Embed Size (px)

DESCRIPTION

Présentation des structures de données en PHP5

Citation preview

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