Développement d'applications Web avec LAMP

Document d'accompagnement pour le cours 420-KB9-LG

Les tableaux

Dernière mise à jour le 8 octobre 2022

Les tableaux sont massivement utilisés en PHP.

Il existe deux types de tableaux : les tableaux indexés numériquement et les tableaux associatifs, parfois appelés "dictionnaires".

Tableaux indexés numériquement

C'est le tableau ordinaire, celui qu'on retrouve dans tous les langages de programmation.

Créer un tableau indexé numériquement

La création se fait généralement à l'aide de l'instruction array. Comme echo, il ne s'agit pas d'une fonction, mais bien d'une construction du langage (instruction) :

$hobbits = array();

// avec initialisation
$hobbits = array("Frodon", "Sam", "Merry");

L'instruction array n'est pas nécessaire si le tableau est initialisé au moment de sa création :

// avec initialisation, mais sans l'instruction "array"
$hobbits[0] = "Frodon";
$hobbits[1] = "Sam";
$hobbits[2] = "Merry";

Un tableau peut être initialisé avec une série de valeurs consécutives à l'aide de la fonction range() :

$nombres = range(1, 10);
$nombres = range(-10, 10);
$nombres = range(10, 1); // ordre décroissant
$lettre = range('a', 'z');

L'accès à un tableau indexé numériquement s'effectue comme dans les autres langages de programmation :

// affectation
$hobbits[3] = "Pippin";

// lecture
echo $hobbits[1]; // Sam

La fonction count() retourne le nombre d'éléments d'un tableau :

$hobbits = array("Frodon", "Sam", "Merry", "Pippin");

echo count($hobbits); // 4

// sizeof() est un alias de count()
echo sizeof($hobbits); // 4

Pour ajouter un élément à la fin du tableau, même si on ignore la taille du tableau, il suffit de ne pas donner l'indice et de ne fournir qu'une paire de crochets vide :

$hobbits[] = "Bilbo"; // ajoute "Bilbo" à la position 4

// même chose que...
$hobbits[count($hobbits)] = "Bilbo";

Parcourir un tableau indexé numériquement

L'affichage du contenu d'un tableau ordinaire se fait généralement à l'aide d'une boucle for :

for ($i = 0; $i < sizeof($hobbits); $i++) {
  echo $hobbits[$i] . "<br>";
}

Sortie :

Frodon
Sam
Merry
Pippin
Bilbp

Mais peut se faire aussi avec un foreach :

foreach ($hobbits as $un_hobbit) {
  echo $un_hobbit . "<br>";
}

À chaque tour de boucle, la variable $un_hobbit prend la valeur du prochain élément du tableau $hobbits.

Sortie :

Frodon
Sam
Merry
Pippin
Bilbp

Fonctions pour ajouter ou retirer des éléments

array_push()

Cette fonction empile un ou plusieurs éléments à la fin d'un tableau et retourne le nouveau nombre d'éléments de celui-ci. Exemple :

$tab = array("A", "B", "C", "D");

$nb = array_push($tab, "E", "F", "G"); // A, B, C, D, E, F, G

echo $nb; // 7

Si on veut seulement ajouter un élément au tableau, il est plus économique de ne pas passer par une fonction :

$tab[] = "H";

array_pop()

Cette fonction dépile un élément de la fin d'un tableau et retourne cet élément. Exemple :

$tab = array("A", "B", "C", "D");

$elem = array_pop($tab); // A, B, C

echo $elem; // D

array_unshift()

Cette fonction empile un ou plusieurs éléments au début d'un tableau et retourne le nouveau nombre d'éléments de celui-ci. Exemple :

$tab = array("A", "B", "C");

$nb = array_unshift($tab, "X", "Y"); // X, Y, A, B, C

echo $nb; // 5

array_shift()

Cette fonction dépile un élément au début d'un tableau et retourne cet élément. Exemple :

$tab = array("A", "B", "C");

$elem = array_shift($tab); // B, C

echo $elem; // A

Autres fonctions utiles

PHP offre plusieurs fonctions très utiles pour manipuler les tableau. Cherchez un peu avant de réinventer la roue!

Fonction Utilité
in_array() Indique si une valeur appartient à un tableau
array_search() Recherche dans un tableau la première clé associée à la valeur
is_array() Détermine si une variable est un tableau
array_unique() Supprime les doublons d'un tableau
array_reverse() Inverse l'ordre des éléments d'un tableau
max() Retourne la plus grande valeur d'un tableau
min() Retourne la plus petite valeur d'un tableau
array_rand() Prend une ou plusieurs clés, au hasard dans un tableau
array_count_values() Compte le nombre de valeurs d'un tableau
implode() Rassemble les éléments d'un tableau en une chaîne
sort() Trie un tableau en ordre croissant
rsort() Trie un tableau en ordre décroissant

Tableaux associatifs

L'autre genre de tableau offert par PHP est le tableau associatif.

Un tableau est dit "associatif" lorsque l'indice (qu'on appelle "clé") n'est plus un nombre entier, mais une chaîne de caractères.

Créer un tableau associatif

Voici trois exemples de création et d'initialisation du même tableau associatif :

$animaux = array(
  "chien" => "Fido",
  "chat"  => "Ti-mine",
  "singe" => "Bob");

// ou encore
$animaux = array("chien" => "Fido");
$animaux["chat"]  = "Ti-mine";
$animaux["singe"] = "Bob";

// ou encore
$animaux["chien"] = "Fido";
$animaux["chat"]  = "Ti-mine";
$animaux["singe"] = "Bob";

Et voici un exemple d'accès au contenu du même tableau associatif :

echo $animaux["singe"]; // affiche "Bob"

Parcours d'un tableau associatif

Le défi ici est que l'index n'est pas de type numérique.

Bien qu'il existe plusieurs façons de parcourir de tels tableaux, la plus élégante fait appel à l'instruction foreach, disponible depuis PHP 4.

La première version du foreach est :

foreach (tableau as valeur) {
  instructions
}

Dans cette version du foreach, la première variable entre parenthèses est le nom du tableau et la seconde contiendra à chaque tour de boucle la valeur d'une case consécutive du tableau.

Exemple :

echo "<h2>Liste des animaux</h2>";

foreach ($animaux as $nom) {
  echo "Cet animal s'appelle $nom <br>";
}

Qui donne la sortie suivante :

Liste des animaux

Cet animal s'appelle Fido
Cet animal s'appelle Ti-mine
Cet animal s'appelle Bob

Le tableau suivant explique ce qui s'est pasé :

Tour de boucleContenu de $nom
0Fido
1Ti-mine
2Bob

La seconde version du foreach permet d'afficher les couples clé-valeur :

foreach (tableau as cle => valeur) {
  instructions
}

Dans cette autre version du foreach, la première variable entre parenthèses est le nom du tableau, tandis que la deuxième et la troisième contiendront respectivement à chaque tour de boucle la clé et la valeur d'une case consécutive du tableau.

Exemple :

echo "<h2>Liste des animaux</h2>";

foreach ($animaux as $espece => $nom) {
  echo "Ce $espece s'appelle $nom <br>";
}

Qui donne la sortie suivante :

Liste des animaux

Ce chien s'appelle Fido
Ce chat s'appelle Ti-mine
Ce singe s'appelle Bob

Le tableau suivant explique ce qui s'est pasé :

Tour de boucleContenu de $especeContenu de $nom
0chienFido
1chatTi-mine
2singeBob

Fonctions utiles

Fonction Utilité
array_key_exists() Vérifie si une clé existe dans un tableau
array_keys() Retourne toutes les clés ou un ensemble des clés d'un tableau
array_values() Retourne toutes les valeurs d'un tableau
asort() Trie un tableau en ordre croissant et conserve l'association des index
arsort() Trie un tableau en ordre décroissant et conserve l'association des index
ksort() Trie un tableau en fonction des clés en ordre croissant
krsort() Trie un tableau en fonction des clés en ordre décroissant

Questions et exercices de révision

AVERTISSEMENT

Nous ne fournirons pas les réponses à ces questions pour deux bonnes raisons. La première est que celles-ci se trouvent dans les notes de cours. La seconde est que, dans certains cas, ce serait presque donner la réponse à des questions d'examen. :

Question 1

Expliquez ce qui distingue un tableau associatif d'un tableau indexé numériquement.

Question 2

Vrai ou faux? En PHP, on peut créer des tableau multidimensionnels. Si vous ne savez que répondre, essayez pour voir!

Question 3

Vrai ou faux? En PHP, on peut créer des tableaux sans utiliser le mot clé array.

Question 4

En plus de la fonction array_push(), donnez deux façon d'ajouter un élément à la fin d'un tableau.

Question 5

Soit le code suivant :

$nombres = array();
nombres[0] = 27;
nombres[1] = -15;
nombres[3] = 38;

Qu'arrive-t-il avec nombres[2]? Encore une fois, si vous ne savez que répondre, essayez pour voir!

Question 6

Que fait le code suivant?

$donnees = range('Z', 'A');

Question 7

Donnez le code d'une boucle qui affiche le contenu du tableau de la question précédente.

Question 8

Soit le code suivant pour créer un tableau associatif :

$objet = array("forme" => "rectangle",
    "largeur" => "50",
    "hauteur" => "25",
    "couleur" => "rouge"
);

Donnez le code pour produire l'affichage suivant à partir du tableau de la question précédente :

rectangle
50
25
rouge

Question 9

Donnez le code pour produire l'affichage suivant :

forme = rectangle
largeur = 50
hauteur = 25
couleur = rouge

Question 10

Donnez les deux instructions PHP qui permettent d'obtenir la taille d'un tableau.

Question 11

Que vont afficher les instructions de la question précédente (taille du tableau) pour la tableau créé ici?

$tab = array();
$tab[1] = 10;
$tab[2] = 20;
$tab[3] = 30;

Question 12

Donnez les fonctions qui permettent respectivement de trier un tableau en ordre alphabétique croissant, de trier un tableau en ordre alphabétique décroissant et d'inverser le contenu d'un tableau.