Programmation PHP/Tableaux

Un livre de Wikilivres.
Aller à : navigation, rechercher


Création de tableau[modifier | modifier le wikicode]

Un tableau (en anglais array) est une collection d'objet. En PHP, ces objets n'ont pas forcément le même type (cohabitation entre des entiers, des chaines…). Chaque objet est identifié par une clé appelée indice, que l'on met entre crochets (ex : $tableau[indice]).

Il existe trois manières de déclarer un tableau vide :

 $tab = [];       // depuis PHP 5.4
 $tab = {};       // moins permissif aux concaténations
 $tab = array();  // déconseillé depuis PHP 7

Pour créer un tableau non vide :

$t1 = array('champ1', 'champ2');

$t2 = ['champ1', 'champ2'];

$t3[0] = 'champ1';
$t3[1] = 'champ2';

// Affiche les trois mêmes tableaux : Array ( [0] => champ1 [1] => champ2 )
var_dump($t1);
var_dump($t2);
var_dump($t3);
link={{{link}}}
Attention !

print ne fonctionne pas pour les tableaux, il faut utiliser var_dump ou print_r. Par ailleurs, pour récupérer la chaine affichée par ces fonctions, utiliser print_r(MonTableau1, true).

Autres exemples :

 $tab[0] = 1;  // entier
 $tab[1] = 2.0; // flottant
 array_push($tab,'Ligne 3');
 $tab[] = 'Ligne 4';
 var_dump($tab);

Il en est de même pour les tableaux à deux dimensions.

 $tab = array();
 $tab[0][0] = '0-0';
 $tab[0][1] = '0-1';
 $tab[1][0] = '1-0';
 $tab[1][1] = '1-1';
 var_dump($tab);

On distingue deux types de tableau :

  • Le tableau standard, dont la clé est son indice (le numéro de ligne en partant de zéro). Pratique pour être parcouru par une variable compteur, ou pour être rempli dans un certain ordre.
  • Le tableau associatif, auquel on accède par le nom d'une clé en chaine de caractères.


Tableau itératifs[modifier | modifier le wikicode]

Les clés du tableaux sont des nombres. Ils ont l'avantage de pouvoir être parcourus par un compteur.

Exemple

$tab = array('val1', 'val2', 'val3');    // $tab[0] vaut val1 /-/ $tab[1] vaut val2 /-/ etc.

for($i = 0; $i<2; $i++)
  echo $tab[$i];

Ce code affichera : val1val2.

En PHP, on peut aussi directement affecter des indices du tableau, comme suit :

Début d’un principe
Fin du principe


Notez que les indices ne sont pas typés (on pourra indifféremment utiliser $tab[1] et $tab['1']).


Tableaux associatifs[modifier | modifier le wikicode]

Ils fonctionnent de la même manière que les tableaux itératifs, sauf que l'utilisateur en choisit la clé. À chaque clé correspond une valeur (injection).

Voici un exemple de déclaration :

Exemple

$tab = array('cle1' => 'val1', 'cle2' => 'val2', 'cle3' => 'val3');
 
print $tab['cle2'];   //affichera: val2

//parcours du tableau en boucle
foreach($tab as $key=>$value)
    print $key." : ".$value.". ";

Résultat : cle1 : val1. cle2 : val2. cle3 : val3.

Pour ne garder que les valeurs on peut utiliser impode(), qui convertit un tableau en chaine avec séparateur :

 print implode(". ", $tab).". ";

Résultat : val1. val2. val3.


Fonctions de lecture[modifier | modifier le wikicode]

  • count : cette fonction renvoie le nombre d'éléments présent dans le tableau.
Début d’un principe
Fin du principe


  • key : clé de l'élément courant du tableau, celui vers lequel le pointeur fait référence.
  • current : valeur de l'élément courant.
  • reset : valeur du premier élément.
  • end : valeur du dernier élément.
  • each : valeur de l'élément courant, et avance le pointeur au suivant.
  • prev : valeur de l'élément précédent.
  • next : valeur de l'élément suivant.
  • array_values($tab) : renvoie un tableau contenant toutes les valeurs du tableau en paramètre.
  • array_keys($tab) : renvoie un tableau contenant toutes les clés du tableau en paramètre. De plus, si une valeur est définie en paramètre deux, le résultat ne contient que les clés associées à celle-ci.

Exemple :

 $tab = array ("mixte valeur<sub>1</sub>","mixte valeur<sub>2</sub>","...","mixte valeur<sub>n</sub>");
 echo key($tab);
 echo ' : ';
 echo current($tab);

Affiche 0 : mixte valeur1

Les fonctions key() et current() peuvent accéder aux autres éléments du tableau après each() ou next().

Il existe aussi différentes méthodes liées aux tableaux, des méthodes de tri, de recherche, de concaténation de tableaux, des méthodes d'ajouts et de suppressions d'éléments, etc.


Fonctions d'écriture[modifier | modifier le wikicode]

Pour manipuler des tableaux il est indispensable de connaitre les fonctions suivantes :

  • explode($separateur, $tableau) : convertit une chaine de caractères en tableau itératif.
  • implode($separateur, $tableau) : convertit un tableau en chaine de caractères.
  • sizeof($tableau) : renvoie la taille du tableau (le nombre d'objets qu'il contient).
  • array_push($monTableau, $valeur) ajoute une ligne à la fin du tableau, équivaut à $monTableau[][1] (empile).
  • array_unshift($monTableau, $valeur) ajoute une ligne au début du tableau[2].
  • array_pop($monTableau) retire une la dernière ligne du tableau, en la renvoyant[3] (dépile).
  • array_shift($monTableau) retire une la première ligne du tableau, en la renvoyant[4].
  • array_merge($monTableau1, $monTableau2, $monTableau3) : fusionne plusieurs tableaux[5].
  • in_array($aiguille, $botteDeFoin) renvoie un booléen si l'élément est trouvé.
  • array_search($aiguille, $botteDeFoin) renvoie la clé de l'élément trouvé, ou NULL sinon.
  • array_unique($tableau) filtre les valeurs en doublon (quelles que soient leurs clés).
  • array_filter($tableau, fonction) filtre les lignes selon fonction exécutée sur chaque élément.
  • array_map(fonction, $tableau) exécute une fonction sur chaque valeur du tableau[6]. Ex : array_map('trim', $tableau).
  • array_walk($tableau, fonction) exécute une fonction sur chaque élément (clé ou valeur).
  • array_chunk($tableau, $taille) découpe le tableau fourni en tableaux de la taille fournie.
  • array_slice($tableau, $début, $taille) renvoie la partie du tableau à partir de l'élément dont le numéro est le premier paramètre, de la taille en paramètre deux.


Exemple

$chaine = 'MonFichier.2016.txt';
$tab = explode('.', $chaine);    // au niveau des points, on explose la chaine (en trois)
var_dump($tab);                  /* affiche : 
  array(3) {
   [0]=> string(10) "MonFichier"
   [1]=> string(4) "2016"
   [2]=> string(3) "txt"
 }
*/

echo $tab[0]; // affiche : MonFichier
echo 'L\'extension du fichier est : '.$tab[sizeof($tab)-1]; // affiche : L'extension du fichier est : txt
link={{{link}}}
Attention !

Comme le premier indice du tableau est zéro, le dernier est égal à sa taille moins un.


Joindre les éléments "id" d'un tableau de tableaux

echo implode(', ', array_map(function ($ligne) {
  return $ligne['id'];
}, $tableau));

Tris[modifier | modifier le wikicode]

  • array_multisort($tableau, SORT_ASC) permet de trier un tableau dans l'ordre croissant de ses valeurs.
  • sort($tableau) : trie le tableau par valeurs croissantes, en recréant des clés numériques.
  • asort($tableau) : trie le tableau par valeurs croissantes, en conservant les clés associées.
  • arsort, fonction) : trie le tableau par valeurs décroissantes, en conservant les clés associées.
  • usort($tableau, fonction) : trie selon une fonction donnée[7].
  • ksort($tableau) : trie par clés croissantes.

Exemple

$array = array("name"=>"Toyota", "type"=>"Celica", "colour"=>"black", "manufactured"=>"1991");

array_multisort($array, SORT_ASC);
var_dump($array);
// array(4) { ["manufactured"]=> string(4) "1991" ["type"]=> string(6) "Celica" ["name"]=> string(6) "Toyota" ["colour"]=> string(5) "black" }
// On remarque que les majuscules sont avant les minuscules.

arsort($array);
var_dump($array);
// array(4) { ["colour"]=> string(5) "black" ["name"]=> string(6) "Toyota" ["type"]=> string(6) "Celica" ["manufactured"]=> string(4) "1991" }

asort($array);
var_dump($array);
// array(4) { ["manufactured"]=> string(4) "1991" ["type"]=> string(6) "Celica" ["name"]=> string(6) "Toyota" ["colour"]=> string(5) "black" }

sort($array);
var_dump($array);
// array(4) { [0]=> string(4) "1991" [1]=> string(6) "Celica" [2]=> string(6) "Toyota" [3]=> string(5) "black" }

ksort($array);
var_dump($array);
// array(4) { ["colour"]=> string(5) "black" ["manufactured"]=> string(4) "1991" ["name"]=> string(6) "Toyota" ["type"]=> string(6) "Celica" }

Tableaux multi-dimensionnels[modifier | modifier le wikicode]

La clé d’un tableau peut pointer sur un second tableau créant ainsi un tableau multi-dimensionnel.

Début d’un principe
Fin du principe


Résultat :

0-Hubert Gérant : hubert@example.com
1-Jean Réceptionniste : reception@example.com
NB : Dans cet exemple, une base de données serait sûrement plus adéquate.

Références[modifier | modifier le wikicode]