Les tableaux
Par Moosh, mardi 1 mars 2005 à 15:07 :: PHP :: #8 :: rss
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 :
<?php $tableau[] = "a"; $tableau[] = "b"; ?>
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.
<?php $tableau[0] = "a"; $tableau[1] = "b"; ?>
Ou aussi :
<?php $tableau["un"] = 1; $tableau["deux"] = 2; ?>
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().
<?php ?>
3- Parcourir un tableau
Vous pouvez procéder de plusieurs manières.
Avec list() et each()
<?php { echo "$cle : $val<br />"; } ?>
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).
<?php ?>
Avec foreach()
Depuis PHP4, il est également possible d'utiliser la fonction foreach() :
Avec next(), prev() etc...
Enfin, il existe une série de fonctions permettant de se déplacer dans un tableau.
| Fonction | Description |
| 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).
<?php // recuperation de l'adresse ip // inversion { } ?>
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).
<?php { echo "$cle : $val<br />"; } ?>
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).
<?php // recuperation de l'adresse ip // on en crée un tableau // on trie le tableau par indice décroissant // ce qui permet dans le cas présent de l'inverser // on re-transforme notre tableau inversé en chaine ?>
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) :
<?php // NB : srand n'est plus nécessaire depuis PHP 4.2.0 { } ?>
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


Commentaires
1. Le vendredi 4 mars 2005 à 02:48, par fab
2. Le vendredi 4 mars 2005 à 19:03, par Damien
3. Le vendredi 11 mars 2005 à 17:42, par Bruno
4. Le samedi 12 mars 2005 à 08:48, par Damien
5. Le samedi 9 avril 2005 à 17:52, par hector
6. Le lundi 22 août 2005 à 15:11, par Joss
7. Le vendredi 9 décembre 2005 à 14:50, par Cham
8. Le mardi 3 janvier 2006 à 19:10, par dinfree
9. Le mardi 24 janvier 2006 à 11:51, par petitotess
10. Le mardi 14 mars 2006 à 23:35, par Bertrand
11. Le jeudi 16 mars 2006 à 21:37, par Bertrand
12. Le dimanche 19 mars 2006 à 06:27, par toxicity
13. Le vendredi 9 juin 2006 à 15:25, par Ruz
14. Le lundi 4 septembre 2006 à 22:26, par ed
15. Le lundi 18 septembre 2006 à 16:41, par solidaritok
16. Le mardi 10 octobre 2006 à 14:44, par guino
17. Le jeudi 31 mai 2007 à 15:17, par Bassfinger
18. Le samedi 5 janvier 2008 à 00:36, par test qi
19. Le mercredi 13 février 2008 à 20:10, par fad010579
20. Le vendredi 29 février 2008 à 23:48, par paul thiam
21. Le dimanche 8 juin 2008 à 09:07, par Edward82
22. Le dimanche 8 juin 2008 à 14:49, par ludo
23. Le mercredi 25 juin 2008 à 16:22, par madousn
Ajouter un commentaire