Comme à son habitude, le PHP propose une riche collection de fonctions pour faciliter le travail avec les tableaux.

1- Avant propos

Un tableau est un type de variable qui permet de ranger des informations.

Il est composé de lignes (éléments), et d'une ou plusieurs colonnes. Un tableau contenant plusieurs colonnes est appelé tableau à plusieurs dimensions. En PHP, les tableaux à plusieurs dimensions sont en fait composés de tableaux à une dimension. Dans la suite de ce tutorial on utilisera donc uniquement des tableaux à une dimension (une seule colonne donc).

Un vecteur est un tableau à une dimension.

  • les tableaux scalaires sont indexés par une suite numérique (ex: $tableau[1])
  • les tableaux associatifs sont référencés par un terme (ex: $tableau["terme"])

Afin de faciliter la compréhension de ce tutorial, nous allons utiliser une série d'exemples téléchargeables en archive zip. Le nom du fichier à se reporter, sera indiqué (exemple: voir tri2.php).

2- Remplir un tableau

Il a plusieurs façons d'insérer des éléments dans un tableau. On peut tout simplement leur affecter une valeur, de la même façon que pour une autre variable.
Par exemple, pour insérer les deux valeurs "a" et "b" dans le tableau $tableau :

  1. <?php
  2. $tableau[] = "a";
  3. $tableau[] = "b";
  4. ?>

Les deux valeurs auront pour indice les indices suivant l'indice le plus important. Dans notre cas présent, ce seront les indices 0 et 1 (voir remplir1.php).
On peut également fixer la valeur des indices.

  1. <?php
  2. $tableau[0] = "a";
  3. $tableau[1] = "b";
  4. ?>

Ou aussi :

  1. <?php
  2. $tableau["un"] = 1;
  3. $tableau["deux"] = 2;
  4. ?>

Ce n'est cependant pas très pratique lorsque l'on souhaite insérer plusieurs valeurs d'un coup. En pratique on utilisera donc plutôt la fonction array().

  1. <?php
  2. $a1 = array("un", "deux", "trois", "nous irons au bois");
  3. $a2 = array(1 => "un", "deux", "trois", "nous irons au bois"); // pour commencer à 1
  4. $a3 = array(1 => "un", 2 => "deux", 3 => "trois", 4 => "nous irons au bois");
  5. ?>

3- Parcourir un tableau

Vous pouvez procéder de plusieurs manières.

Avec list() et each()

  1. <?php
  2. while(list($cle,$val) = each($tableau))
  3. {
  4. echo "$cle : $val<br />";
  5. }
  6. ?>

On se déplace ainsi dans le tableau ligne par ligne. Pour chaque ligne, l'indice est affectée à la variable $cle, et la valeur à la variable $val.

Attention : Il faut noter qu'une fois la boucle "while" terminée, le pointeur de tableau se trouve à la fin. Si vous voulez parcourir le tableau à nouveau, vous devez remettre le pointeur à la position zéro à l'aide de la fonction reset() (voir parcourir1.php).

  1. <?php
  2. reset($tableau);
  3. ?>

Avec foreach()

Depuis PHP4, il est également possible d'utiliser la fonction foreach() :

  1. <?php
  2. // Sans afficher l'indice
  3. foreach($tableau as $val)
  4. {
  5. echo "$val<br />";
  6. }
  7. // En affichant l'indice
  8. foreach($tableau as $cle => $val)
  9. {
  10. echo "$cle : $val<br />";
  11. }
  12. ?>

Avec next(), prev() etc...

Enfin, il existe une série de fonctions permettant de se déplacer dans un tableau.

FonctionDescription
reset()Remet le pointeur interne de tableau au début.
pos()Retourne la valeur de l'élément courant d'un tableau.
key()Retourne l'indice de l'élément courant d'un tableau.
next()Avance le pointeur interne d'un tableau.
prev()Recule le pointeur courant de tableau.
end()Positionne le pointeur de tableau en fin de tableau.

Exemple : pour afficher une adresse IP en ordre inverse (voir parcourir3.php).

  1. <?php
  2. // recuperation de l'adresse ip
  3. $ip = getenv("REMOTE_ADDR");
  4. // inversion
  5. $array = explode(".", $ip);
  6. end($array); // on se place à la fin
  7. while (key($array) != 0) // tant qu'on est pas arrivé au début
  8. {
  9. $rip = $rip . pos($array) . "."; // mise à jour de la variable
  10. prev($array); // on revient en arrière d'un élément
  11. }
  12. $rip = $rip . pos($array); // premier élément
  13. ?>

Dans ce cas, cette solution n'est cependant pas optimale. Il serait plus judicieux d'inverser le contenu du tableau en utilisant des fonctions de tri.

4- Trier un tableau

Il est rare de devoir écrire une routine de tri en php car beaucoup de cas on été prévus d'emblée.

Attention : la plupart des fonctions de tri ne retournent pas de valeur mais modifient simplement le tableau passé en paramètre.

sort() et rsort()

Les fonctions sort() et rsort() permettent de trier un tableau par valeur croissante ou décroissante. Les indices sonts changés.

void sort(tableau nomdutableau);

Petit exemple permettant de trier le tableau en ordre inverse (voir tri1.php).

  1. <?php
  2. $tableau = array(1 => 1, 2, 3);
  3. rsort($tableau);
  4. while(list($cle, $val) = each($tableau))
  5. {
  6. echo "$cle : $val<br />";
  7. }
  8. ?>

Il est possible de garder les indices correspondants en utilisant les fonctions asort() et arsort(). Dans l'exemple précédent, arsort serait donc plus adapté.

ksort() et krsort()

On peut également trier un tableau par indice, à l'aide des fonctions ksort() et krsort(), qui s'utilisent de la même manière que les fonctions précédentes.

void ksort(tableau nomdutableau);

Reprenons l'exemple pour afficher une adresse IP inversée (voir tri2.php).

  1. <?php
  2. // recuperation de l'adresse ip
  3. $ip = getenv("REMOTE_ADDR");
  4. // on en crée un tableau
  5. $array = explode(".", $ip);
  6. // on trie le tableau par indice décroissant
  7. // ce qui permet dans le cas présent de l'inverser
  8. krsort($array);
  9. // on re-transforme notre tableau inversé en chaine
  10. $rip = implode(".", $array);
  11. ?>

Plus simple, non ?

shuffle()

La fonction shuffle() permet, quant à elle, de mélanger les éléments d'un tableau.

void shuffle(tableau nomdutableau);

Exemple (voir tri3.php) :

  1. <?php
  2. $tableau = array(1, 2, 3, 4, 5);
  3. srand((double)microtime()*10000); // pour faire fonctionner le hasard
  4. // NB : srand n'est plus nécessaire depuis PHP 4.2.0
  5. shuffle($tableau); // mélange le tableau
  6. while(list($cle, $val) = each($tableau))
  7. {
  8. echo $val . ' '; // affiche donc les nombres au hasard
  9. }
  10. ?>

Et plus encore...

Il existe encore une quantité de fonctions permettant de trier des tableaux, mais leur utilisation est moins fréquente.

A vous de les découvrir à l'aide du manuel : http://www.php.net/manual/fr/ref.array.php

5- Conclusion

N'oubliez pas que vous pouvez télécharger les exemples.

Ce tutorial n'a pas couvert toutes les possibilités offertes par PHP, les fonctions permettant de manipuler les tableaux étant tellement nombreuses.

Vous pouvez consulter le manuel pour en savoir plus : http://www.php.net/manual/fr/ref.array.php