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 :
|
<?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
:
|
<?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 :
|
<?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 :
|
<?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 :
|
<?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 :
|
<?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 :
|
<?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 :
|
<?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...
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 :
|
<?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 :
|
<?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.
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 :
- D'abord le nom de l'array (ici $coordonnees)
- Ensuite le mot-clé as (qui signifie
quelque chose comme "en tant que")
- 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 :
|
<?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 :
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 - Sélectionner
|
<?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.
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 :
|
<?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 :
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
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 ) :
|
<?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.