Dans ce chapitre nous allons découvrir un nouveau type de données : Les tableaux.
Imaginons qu'on ait besoin de sauvegarder les notes d'un élève. La première approche consiste à créer plusieurs variables :
Le problème, c'est que si on doit sauvegarder une dizaine, voire une centaine de notes, cette approche devient vite ingérable. Les tableaux permettent de solutionner ce problème en permettant de représenter une liste de valeurs.
Les tableaux indexés
Pour créer un tableau, on utilise les crochets et on sépare les valeurs par des virgules :
On se retrouve avec un tableau qui contient quatre valeurs. Chaque valeur est accessible via son index (un numéro attribué automatiquement). Attention, les index commencent à 0.
| Index | Valeur |
|---|---|
| 0 | 10 |
| 1 | 20 |
| 2 | 9 |
| 3 | 8 |
Accéder à une valeur
Pour récupérer une valeur particulière, on utilise les crochets avec le numéro de l'index :
Il faut bien penser à soustraire 1 : si on veut le quatrième élément, on utilise l'index 3.
L'ancienne notation
Dans les anciennes versions de PHP, les tableaux s'écrivaient différemment, avec la fonction array() :
Les deux notations sont encore valables aujourd'hui, mais la syntaxe avec les crochets est devenue la norme et l'ancienne est de moins en moins utilisée.
Les tableaux associatifs
Les tableaux indexés conviennent bien pour des listes simples. Mais si on veut sauvegarder plusieurs informations sur un élève (son nom, son prénom et ses notes), un index numérique n'est pas très parlant.
PHP permet de définir des clés personnalisées pour chaque valeur. La notation utilise => pour associer une clé à sa valeur :
Pour accéder à une valeur, on utilise la même syntaxe qu'avec les index numériques, en remplaçant le nombre par la clé :
On peut même combiner les deux pour afficher le prénom et le nom :
Ce format est beaucoup plus lisible qu'un tableau numérique. N'importe qui peut comprendre ce que représente chaque valeur sans avoir à compter les index.
Modifier et ajouter des valeurs
Pour modifier une valeur existante, on accède à la clé et on lui assigne une nouvelle valeur :
Pour ajouter une nouvelle valeur à un tableau numérique, on peut spécifier l'index :
Mais il y a une manière plus pratique : utiliser des crochets vides. PHP attribue alors automatiquement le prochain index disponible :
C'est beaucoup plus commode quand on a plusieurs valeurs à rajouter, car on n'a pas à se préoccuper de l'index.
Tableaux imbriqués
On peut avoir des tableaux qui contiennent d'autres tableaux. C'est particulièrement utile pour représenter des structures de données complexes. Par exemple, une classe qui contient plusieurs élèves :
Pour récupérer la deuxième note du deuxième élève, on enchaîne les accès :
On décompose le raisonnement étape par étape :
$classe[1]: le deuxième élève (index 1)['notes']: son tableau de notes[1]: la deuxième note (index 1)
C'est dans ces situations qu'il faut avoir une bonne représentation mentale de la structure du tableau pour savoir où se trouvent les valeurs que l'on cherche. Pas de panique si on s'y perd au début, c'est tout à fait normal et ça vient avec la pratique.
Déboguer un tableau
Si on essaie d'afficher un tableau avec echo, PHP affiche simplement Array car il ne sait pas comment convertir un tableau en chaîne de caractères. Pour inspecter le contenu d'un tableau, on utilise print_r() :
Ce qui affiche quelque chose comme :
C'est très utile pour déboguer et comprendre la structure d'un tableau.
L'importance de l'indentation
Quand on travaille avec des tableaux imbriqués, l'indentation du code est capitale. Comparez ces deux versions :
La règle est simple : dès qu'on ouvre un crochet et qu'on passe à la ligne, on indente d'un cran. La fermeture du crochet se fait au même niveau d'indentation que l'ouverture. Cette habitude permet de repérer immédiatement la structure des données et d'éviter bien des maux de tête lors de la relecture.