Aller au menu - Aller au contenu

Icône Les tableaux

Mise à jour : 03/04/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
159 191 visites depuis 7 jours , dont 5 417 sur ce chapitre , classé 3/777
Nous entamons ici un aspect très important du PHP : les array.
Vous allez voir qu'il s'agit de variables "composées", que l'on peut imaginer sous la forme de tableau.

On peut faire énormément de choses avec les array et leur utilisation n'est pas toujours très facile. Cependant, ils vont très rapidement nous devenir indispensables et vous devez bien comprendre leur fonctionnement. Si vous y parvenez, nous aurons fait le tour des bases du PHP et vous serez fin prêts pour la suite, qui s'annonce concrète et passionnante.

Mais trève de bavardages, à l'abordaaaage ! :pirate:
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Les deux types de tableaux

Un tableau (array) est une variable. Mais une variable un peu spéciale.

Reprenons. Jusqu'ici vous avez travaillé avec des variables toutes simples : elles ont un nom et une valeur. Par exemple :

Code : PHP
1
2
3
4
<?php
$prenom = 'Nicole';
echo 'Bonjour ' . $prenom; // Cela affichera : Bonjour Nicole
?>

Ce qui peut se matérialiser sous la forme :

Nom Valeur
$prenom Nicole


Ici, nous allons voir qu'il est possible d'enregistrer de nombreuses informations dans une seule variable (bien plus que "Nicole") grâce aux tableaux. On distingue deux types de tableaux :
  • Les tableaux numérotés
  • Les tableaux associatifs


Les tableaux numérotés



Ces tableaux sont très simples à imaginer. Regardez par exemple ce tableau, contenu de la variable $prenoms :

Clé Valeur
0 François
1 Michel
2 Nicole
3 Véronique
4 Benoît
... ...


$prenoms est un array : c'est ce qu'on appelle une variable "tableau". Elle n'a pas qu'une valeur mais plusieurs valeurs (vous pouvez en mettre autant que vous voulez).

Dans un array, les valeurs sont rangées dans des "cases" différentes. Ici, nous travaillons sur un array numéroté, c'est-à-dire que chaque case est identifiée par un numéro. Ce numéro est appelé clé.

Attention ! Un array numéroté commence toujours à la case n°0 ! Ne l'oubliez jamais, ou vous risquez de faire des erreurs par la suite...


Construire un tableau numéroté



Pour créer un tableau numéroté en PHP, on utilise généralement la fonction array.

Cet exemple vous montre comment créer l'array $prenoms :

Code : PHP
1
2
3
4
<?php
// La fonction array permet de créer un array
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');
?>

L'ordre a beaucoup d'importance. Le premier élément ("François") aura le n°0, ensuite Michel le n°1, etc.

Vous pouvez aussi créer manuellement le tableau case par case :

Code : PHP
1
2
3
4
5
<?php
$prenoms[0] = 'François';
$prenoms[1] = 'Michel';
$prenoms[2] = 'Nicole';
?>


Si vous ne voulez pas avoir à écrire vous-même le numéro de la case que vous créez, vous pouvez laisser PHP le sélectionner automatiquement en laissant les crochets vides :

Code : PHP
1
2
3
4
5
<?php
$prenoms[] = 'François'; // Créera $prenoms[0]
$prenoms[] = 'Michel'; // Créera $prenoms[1]
$prenoms[] = 'Nicole'; // Créera $prenoms[2]
?>


Afficher un tableau numéroté



Pour afficher un élément, il faut donner sa position entre crochets après $prenoms. Cela revient à dire à PHP :

Affiche-moi le contenu de $prenoms dans la case n°1

Pour faire cela en PHP, il faut écrire le nom de la variable, suivi du numéro entre crochets. Pour afficher "Michel", on doit donc écrire :

Code : PHP
1
2
3
<?php
echo $prenoms[1];
?>

C'est tout bête, du temps que vous n'oubliez pas que Michel est en seconde position et donc qu'il a le numéro 1 (étant donné qu'on commence à compter à partir de 0). :)

Si vous oubliez de mettre les crochets, ça ne marchera pas (ça affichera juste "Array"...). Dès que vous travaillez sur des array, vous êtes obligés d'utiliser les crochets pour indiquer dans quelle "case" on doit aller chercher l'information, sinon PHP ne sait pas quoi récupérer.



Les tableaux associatifs



Les tableaux associatifs fonctionnent sur le même principe, sauf qu'au lieu de numéroter les cases, on va les étiqueter en leur donnant à chacune un nom différent.

Par exemple, supposons que je veuille, dans un seul array, enregistrer les coordonnées de quelqu'un (nom, prénom, adresse, ville etc...). Si l'array est numéroté, comment savoir que le n°0 est le nom, le n°1 le prénom, le n°2 l'adresse ?... C'est là que deviennent utiles les tableaux associatifs.

Construire un tableau associatif



Pour les créer, on utilisera la fonction array comme tout à l'heure, mais on va mettre "l'étiquette" devant chaque information :

Code : PHP
1
2
3
4
5
6
7
8
<?php
// On crée notre array $coordonnees
$coordonnees = array (
    'prenom' => 'François',
    'nom' => 'Dupont',
    'adresse' => '3 Rue du Paradis',
    'ville' => 'Marseille');
?>


Note importante : il n'y a ici qu'une seule instruction (un seul point-virgule). J'aurais pu tout mettre sur la même ligne, mais rien ne m'empêche de séparer ça sur plusieurs lignes pour que ça soit plus facile à lire. :)


Vous remarquez qu'on écrit une flèche (=>) pour dire "associé à". Par exemple, on dit "ville associé à Marseille".

Nous avons créé un tableau qui ressemble à la structure suivante :

Clé Valeur
prenom François
nom Dupont
adresse 3 Rue du Paradis
ville Marseille


Il est aussi possible de créer le tableau case par case comme ceci :

Code : PHP
1
2
3
4
5
6
<?php
$coordonnees['prenom'] = 'François';
$coordonnees['nom'] = 'Dupont';
$coordonnees['adresse'] = '3 Rue du Paradis';
$coordonnees['ville'] = 'Marseille';
?>


Afficher un tableau associatif



Pour afficher un élément, il suffit d'indiquer le nom de cet élément entre crochets, ainsi qu'entre guillemets ou apostrophes puisque l'étiquette du tableau associatif est un texte.

Par exemple, pour extraire la ville, on devra taper :

Code : PHP
1
2
3
<?php
echo $coordonnees['ville'];
?>




Quand utiliser un array numéroté et quand utiliser un array associatif ?


Comme vous l'avez vu dans mes exemples, ils ne servent pas à stocker la même chose :
  • Les array numérotés permettent de stocker une série d'éléments du même type, comme des prénoms. Chaque élément du tableau contiendra alors un prénom.
  • Les array associatifs permettent de découper une donnée en plusieurs sous-éléments. Par exemple, une adresse peut être découpée en nom, prénom, nom de rue, ville...

Parcourir un tableau

Lorsqu'un tableau a été créé, on a souvent besoin de le parcourir pour savoir ce qu'il contient. Nous allons voir trois moyens d'explorer un array :
  • La boucle for
  • La boucle foreach
  • La fonction print_r (utilisée principalement pour le débuggage)


La boucle for



Il est très simple de parcourir un tableau numéroté avec une boucle for. En effet, puisqu'il est numéroté à partir de 0, on peut faire une boucle for qui incrémente un compteur à partir de 0 :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
// On crée notre array $prenoms
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');

// Puis on fait une boucle pour tout afficher :
for ($numero = 0; $numero < 5; $numero++)
{
    echo $prenoms[$numero] . '<br />'; // affichera $prenoms[0], $prenoms[1] etc...
}
?>




Quand on écrit $prenoms[$numero], la variable $numero est d'abord remplacée par sa valeur. Par exemple, si $numero vaut 2, alors cela signifie qu'on cherche à obtenir ce que contient $prenoms[2], c'est-à-dire... Nicole, bravo vous avez compris. :)


La boucle foreach



La boucle for a beau fonctionner, on peut utiliser un type de boucle plus adapté aux tableaux qu'on n'a pas vu jusqu'ici : foreach. C'est une sorte de boucle for spécialisée dans les tableaux.

foreach va passer en revue chaque ligne du tableau, et lors de chaque passage, elle va mettre la valeur de cette ligne dans une variable temporaire (par exemple $element).

Je parle chinois ? Ok, alors regardez :

Code : PHP
1
2
3
4
5
6
7
8
<?php
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');

foreach($prenoms as $element)
{
    echo $element . '<br />'; // affichera $prenoms[0], $prenoms[1] etc...
}
?>




C'est le même code que tout à l'heure mais basé ici sur une boucle foreach. A chaque tour de boucle, la valeur de l'élément suivant est mise dans la variable $element. On peut donc utiliser $element uniquement à l'intérieur de la boucle afin d'afficher l'élément en cours.

L'avantage de foreach est qu'il permet aussi de parcourir les tableaux associatifs.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
$coordonnees = array (
    'prenom' => 'François',
    'nom' => 'Dupont',
    'adresse' => '3 Rue du Paradis',
    'ville' => 'Marseille');

foreach($coordonnees as $element)
{
    echo $element . '<br />';
}
?>




foreach va mettre tour à tour dans la variable $element le prénom, le nom, l'adresse et la ville contenus dans l'array $coordonnees.

On met donc entre parenthèses :
  1. D'abord le nom de l'array (ici $coordonnees)
  2. Ensuite le mot-clé as (qui signifie quelque chose comme "en tant que")
  3. Enfin le nom d'une variable que vous choisissez qui va contenir tour à tour chacun des éléments de l'array (ici $element).


Entre les accolades, on n'utilise donc que la variable $element.
La boucle s'arrête lorsqu'on a parcouru tous les éléments de l'array.

Toutefois, avec cet exemple on ne récupère que la valeur. Or, on peut aussi récupérer la clé de l'élément. On doit dans ce cas écrire foreach comme ceci :

Code : PHP
1
<?php foreach($coordonnees as $cle => $element) ?>


A chaque tour de boucle, on disposera non pas d'une mais de deux variables :
  • $cle : elle contiendra la clé de l'élément en cours d'analyse ("prenom", "nom", etc.).
  • $element : il contiendra la valeur de l'élément en cours ("François", "Dupont", etc.).


Testons le fonctionnement avec un exemple :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
$coordonnees = array (
    'prenom' => 'François',
    'nom' => 'Dupont',
    'adresse' => '3 Rue du Paradis',
    'ville' => 'Marseille');

foreach($coordonnees as $cle => $element)
{
    echo '[' . $cle . '] vaut ' . $element . '<br />';
}
?>



Avec cette façon de procéder, vous avez maintenant dans la boucle la clé ET la valeur.

Et foreach, croyez-moi, c'est un truc vraiment pratique ! On aura souvent l'occasion de s'en servir dans nos prochains scripts PHP !


Afficher rapidement un array avec print_r



Parfois, en codant votre site en PHP, vous aurez sous les bras un array et vous voudrez savoir ce qu'il contient, juste pour votre information. Vous pourriez utiliser une boucle for ou, mieux, une boucle foreach. Mais si vous n'avez pas besoin d'une mise en forme spéciale et que vous voulez juste savoir ce que contient l'array, vous pouvez faire appel à la fonction print_r. C'est une sorte de echo spécialisé dans les array.

Cette commande a toutefois un défaut : elle ne renvoie pas de code HTML comme <br /> pour les retours à la ligne. Pour bien voir les retours à la ligne, il faut donc utiliser la balise HTML <pre> qui nous permet d'avoir un affichage plus correct.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$coordonnees = array (
    'prenom' => 'François',
    'nom' => 'Dupont',
    'adresse' => '3 Rue du Paradis',
    'ville' => 'Marseille');

echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>



Voilà, c'est facile à utiliser du temps qu'on n'oublie pas la balise <pre> pour avoir un affichage correct.

Bien entendu, vous n'afficherez jamais des choses comme ça à vos visiteurs. On peut en revanche s'en servir pour le débuggage, pendant la création du site, afin de voir rapidement ce que contient l'array.

Rechercher dans un tableau

Nous allons maintenant faire des recherches dans des array. Cela vous sera parfois très utile pour savoir si votre array contient ou non certaines informations.
Nous allons voir trois types de recherches, basées sur des fonctions PHP :

  • array_key_exists : pour vérifier si une clé existe dans l'array
  • in_array : pour vérifier si une valeur existe dans l'array
  • array_search : pour récupérer la clé d'une valeur dans l'array


Vérifier si une clé existe dans l'array : array_key_exists



Voici notre problème : on a un array, mais on ne sait pas si la clé qu'on cherche est dedans.
On va utiliser pour vérifier ça la fonction array_key_exists qui va parcourir le tableau pour nous et nous dire si le tableau contient cette clé.

On doit lui donner d'abord le nom de la clé à rechercher, puis le nom de l'array dans lequel on fait la recherche :

Code : PHP
1
<?php array_key_exists('cle', $array); ?>


La fonction renvoie un booléen, c'est à dire true (vrai) si la clé est dans l'array, et false (faux) si la clé ne se trouve pas dans l'array. Ca nous permet de faire un test facilement avec un if :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php
$coordonnees = array (
    'prenom' => 'François',
    'nom' => 'Dupont',
    'adresse' => '3 Rue du Paradis',
    'ville' => 'Marseille');

if (array_key_exists('nom', $coordonnees))
{
    echo 'La clé "nom" se trouve dans les coordonnées !';
}

if (array_key_exists('pays', $coordonnees))
{
    echo 'La clé "pays" se trouve dans les coordonnées !';
}

?>



Comme vous pouvez le voir, on n'a trouvé que "nom", et pas "pays" (logique). Seule la première condition a donc été exécutée. :)

Vérifier si une valeur existe dans l'array : in_array



Le principe est le même que array_key_exists... mais cette fois on recherche dans les valeurs. in_array renvoie true si la valeur se trouve dans l'array, false si elle ne s'y trouve pas.

Pour changer un peu de notre array $coordonnees, je vais créer un nouvel array (numéroté) composé de fruits :D

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');

if (in_array('Myrtille', $fruits))
{
    echo 'La valeur "Myrtille" se trouve dans les fruits !';
}

if (in_array('Cerise', $fruits))
{
    echo 'La valeur "Cerise" se trouve dans les fruits !';
}
?>


On ne voit que le message pour la Cerise, tout simplement parce que in_array a renvoyé true pour "Cerise" et false pour "Myrtille".


Récupérer la clé d'une valeur dans l'array : array_search



array_search fonctionne comme in_array : il travaille sur les valeurs d'un array. Voici ce que renvoie la fonction :
  • Si elle a trouvé la valeur, array_search renvoie la clé correspondante (c'est-à-dire le numéro si c'est un array numéroté, ou le nom de la clé si c'est un array associatif).
  • Si elle n'a pas trouvé la valeur, array_search renvoie false.
On reprend l'array numéroté avec les fruits (ça me donne faim tout ça :D ) :

Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');

$position = array_search('Fraise', $fruits);
echo '"Fraise" se trouve en position ' . $position . '<br />';

$position = array_search('Banane', $fruits);
echo '"Banane" se trouve en position ' . $position;
?>


Je sais que je me répète, mais n'oubliez pas qu'un array numéroté commence à 0 ! Cela explique donc pourquoi "Banane" se trouve en position 0...


Voilà donc les fonctions qu'il fallait connaître pour faire une recherche dans un array. Il y en a d'autres mais vous connaissez maintenant les principales.

Q.C.M.

Qu'est-ce qu'un array ?
A partir de quel nombre commence un array numéroté ?
Qu'affiche ce code ?Code : PHP
1
2
3
4
<?php
$prenoms = array ("François", "Michel", "Nicole", "Véronique", "Benoît");
echo $prenoms;
?>
Combien peut-on mettre d'informations différentes dans un array ?
Un peu de calcul mental : que vaudra $resultat à la fin de ces calculs ?Code : PHP
1
2
3
4
<?php
$nombres = array (4, 6, 2, 9, -1, 7);
$resultat = ($nombres[2] * $nombres[4] + $nombres[0]) / ($nombres[1] - $nombres[0]);
?>
Quelle fonction permet d'afficher rapidement tout le contenu d'un array ?

Statistiques de réponses au QCM

Et voilà ! Bravo vous avez terminé la partie I, vous connaissez les bases de PHP !
Vous ne le savez peut-être pas, mais vous avez appris énormément de choses. En fait, vous venez d'apprendre ce que j'estime le plus dur : le début. Au début, on ne sait rien et il faut s'accrocher pour comprendre des choses qui ont l'air de ne servir à rien. Vous en êtes arrivés au bout : félicitations !

A côté, tous les prochains chapitres devraient vous paraître agréables et simples à lire :)
Continuez comme ça, vous êtes sur la bonne voie. Vous allez bientôt maîtriser le PHP comme des pros !
Chapitre précédent Sommaire Chapitre suivant

Partager

67 commentaires pour "Les tableaux"
Note moyenne : 3.61 / 4 (2420 votes)
Pseudo Commentaire
Hors ligne malko # Posté le 06/11/2011 à 22:44:56

Dans le cours de php j'ai pas vu les tableau à plusieurs dimension est-ce dire que PHP n'accepte pas ce type de tableaux?
Hors ligne leruss # Posté le 30/11/2011 à 19:28:13
Avatar

hey au quizz du calcul mental je trouve 0, pas 1, nan ?

web conception
 
Hors ligne -lolo666- # Posté le 20/12/2011 à 02:56:12
Avatar

Ville : Felletin
Pays : France métropolitaine

Le QCM me donne mal à la tête...

Code : PHP
1
2
3
4
<?php
$nombres = array (4, 6, 2, 9, -1, 7);
$resultat = ($nombres[2] * $nombres[4] + $nombres[0]) / ($nombres[1] - $nombres[0]);
?>


A= [2 * (-1) + 4] / (6 - 4)
A= (-2 + 4) / 2
A= 2 / 2
A = 1

Code : PHP
1
2
3
<?php
echo $resultat; //affichera 1...
?>


Trouvé après 40min de creusage de méninges... MERCI LES PARENTHÈSES ! (De rien, bonne nuit !)

CyberHacker player
Le site du Zér0, le paradis du geek, du programmeur, et du débutant !
 
Hors ligne Kyzis # Posté le 07/01/2012 à 00:17:57
Avatar

Salut, très bon tuto, mais j'aimerais proposer cette petite modification de la ligne 8 du code d'exemple de la boucle "for", qui sert à l'affichage du contenu d'un tableau :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php

$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');


for ($numero = 0; $numero < 5; $numero++)
{
    echo '<p>No. ' . $numero . ' : ' . $prenoms[$numero] . '</p>';
}
?>


Elle affiche le numéro d’association de chaque case de l'array "$prenoms". En plus d'afficher tout les clés correspondantes.

Pour vous donner une idée, voici ce qu'elle affiche en faite :

No. 0 : François
No. 1 : Michel
(Etc.)

P.S. J'ai mis des balises "<p>" pour pouvoir attribué un style au texte insérer par la commande echo. Le retour à la ligne se fait avec eux. Donc pas besoin d'utiliser la balise "<br />".

Votre graveur DVD de laptop rend souvent l'âme ? Vous en avez marre de débourser de l'argent à chaque fois pour le faire remplacer. Ben, ne vous fessez plus avoir. Acheter un graveur DVD externe. Il vous dura plus longtemps. Votre porte-feuille en sera plus reconnaissant. "Expérience personnel..."
 
Hors ligne Matruck # Posté le 07/02/2012 à 17:49:45
lutin de nowèlle
Avatar

Avis : Bon

pour le calcul mental de la fin il fallait les voir les parenthèse !

Voir tous les commentaires