Aspect important du PHP : les array.
Il s'agit de variables "composées", que l'on peut imaginer sous la forme de tableau.
Avec les array, on peut faire beaucoup de choses, mais leur utilisation n'est pas toujours très facile. Cependant, ils vont rapidement devenir indispensables, d'où l'intérêt de bien comprendre leur fonctionnement.
Sommaire
Les deux types de tableaux
Un tableau (array) est une variable, mais une variable un peu spéciale.
Jusqu'ici, on avu des variables simple : avec un nom et une valeur. Exemple :
Code PHP
<?php
$prenom = 'Nicole';
echo 'Bonjour ' . $prenom; // Cela affichera : Bonjour Nicole
?>
Ce qu'on peut matérialiser sous la forme :
On va voir qu'il est possible d'enregistrer de nomreuses 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. Exemple de 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, mais plusieurs valeurs (on peut en mettre autant qu'on veut).
Dans un array, les valeurs sont rangées dans des "cases" différentes.
Ici, c'est un array numéroté, c'est à dire que chaque case est identifée par un numéro. Ce numéro est appelé
clé.
 |
Attention, un array numéroté commence toujours à la case nº 0 ! |
Construire un tableau numéroté
Pour créer un tableau numéroté en PHP, on utilise généralement la fonction
array
Exemple montrant comment créer l'array
$prenoms
:
Code PHP
<?php
// La fonction array permet de créer un array
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique', 'Benoît');
?>
L' ordre est très important. Le premier élément ("François") aura le nº 0, etc.
On peut aussi créer manuellement le tableau case par case :
Code PHP
<?php
$prenoms[0] = 'François';
$prenoms[1] = 'Michel';
$prenoms[2] = 'Nicole';
?>
Si on veut ne pas avoir à écrire soi-même le numéro de la case que l'on crée, on peut laisser PHP le sélectionner automatiquement en laissant les crochets vides :
Code PHP
<?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
.
Ce qui revient à dire à PHP :
Affiche moi le contenu de $prenoms dans la case nº 1
Pour cela, en PHP, il faut écrire le nom de la variable, suivi du numéro entre crochets. Exemple pour afficher "Michel" :
Code PHP
<?php
echo $prenoms[1];
?>
Attention à la numérotation. On commence à 0.
 |
Si on oublie de mettre les crochets, ça ne marche pas (ça affiche juste "Array").
Quand on travaille sur des array, on est obligé d'utiliser des crochets pour indiquer dans quelle case on doit aller chercher l'information, sinon PHP ne sait pas quoi récupérer. |
Les tableaux associatifs
Même principe de fonctionnement, sauf qu'au lieu d'étiqueter les cases avec des numéros, on leur donne des noms différents.
Exemple, si on veut 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, etc. C'est là que deviennent utiles les tableaux associatifs.
Construire un tableau associatif
Pour les créer, on utilise la fonction
array
et on met "l'étiquette" devant chaque information :
Code PHP
<?php
// on crée notre array $coordonnees
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
?>
 |
Important : il n'y a ici qu'une seule instruction (un seul point-virgule).
Tout aurait pu être mis sur une ligne, mais que ce soit sur plusieurs lignes comme ici, peut-être plus lisible. |
on remarque qu'on écrit avec une flèche (
=>) pour dire "associé à".
On a créé un tableau qui ressemble à la structure suivante :
Clé | Valeur |
prenom | François |
nom | Dupont |
adresse | 3 Rue du Paradis |
ville | Marseille |
Il est bien sur possible de créer le tableau case par case :
Code PHP
<?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 faut indiquer le nom de cet élément entre crochets et entre guillemets ou apostrophes puisque l'étiquette est un texte.
Exemple, pour extraire la ville, on devra taper :
Code PHP
<?php
echo $coordonnees['ville'];
?>
 |
Quand utiliser un array numéroté et quand utiliser un array associatif ? |
Coome on l'a vu, 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
Quand un tableau est créé, on a souvent besoin de le parcourir pour savoir ce qu'il contient. Voyons trois moyens d'explorer un array :
- La boucle
for
- La boucle
foreach
- La boucle
print_r
(utilisée principalement pour le débuggage).
La boucle for
C'est très simple de parcourir un tableau numéroté avec une boucle
for
. En effet, comme il est numéroté à partir de 0, on peut faire une boucle
for
qui incrémente un compteur à partir de 0 :
Code PHP
<?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.
La boucle foreach
La boucle
for
fonctionne, mais on peut utiliser un type de boucle plus adapté aux tableaux, la boucle
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, il va mettre la valeur de cette ligne dans une variable temporaire (par exemple
$element
).
Ce qui donne :
Code PHP
<?php
// on crée notre array $prenoms
$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 précédemment mais basé 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
<?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 $coordonnee
.
On met donc entre parenthèses :
1. D'abord le nom de l'array (ici $coordonnee
)
2. Ensuite le mot-clé as
(qui signifie "comme" ou "en tant que")
3. Enfin le nom d'une variable qu'on choisit 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
<?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
<?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, on a maintenant dans la boucle la clé ET la valeur.
foreach
est très pratique ! On s'en servira souvent dans les prochains scripts PHP.
Afficher rapidement un array avec print_r
Parfois, en codant son site en PHP, on aura un array et on voudra savoir ce qu'il contient, juste pour notre information.
On pourrait utiliser une boucle
for
ou mieux, une boucle
foreach
. Mais si on n'a pas besoin d'une mise ne forme spéciale, et que l'on veuille
juste savoir ce que contient l'array, on peut 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 utiliser la balise HTML
<pre>
qui permet d'avoir un affichage plus correct.
Code PHP
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>
Facile à utiliser, du moment que l'on n'oublie pas la balise <pre>
pour avoir un affichage correct.
Bien sur, on n'utilise pas ça à ses visiteurs, mais cela peut servir pour un debuggage, pendant la création du site, afin de voir rapidement ce que contient un array.
Rechercher dans un tableau
Voyons les recherches dans un array. Peut servir pour savoir si un array contient des informations.
Voyons 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
Le problè : on a un array, mais on ne sait pas si la clé qu'on cherche esr dedans.
Pour ça, on utilise la fonction
array_key_exists
qui va parcourir le tableau pour nous et nous dire si la clé est dedans.
Il faut lui donner le nom de la clé, puis le nom de l'array dans lequel il faut chercher :
Code PHP
<?php
array_key_exists('cle', $array); ?>
La fonction renvoie un booléen :
true
si la clé est dans l'array, ou
false
si la clé n'est pas dedans.
Ca permet de faire facilement un test avec if :
Code PHP
<?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 !';
}
?>
Dans ce cas, seule la première condition a été exécutée (il n'y a que "nom" qui a été trouvé).
Vérifier si une clé existe dans l'array : in_array
Même principe, mais cette fois, on recherche dans les valeurs.
in_array
renvoie
true
si la valeur est dans l'array,
false
si elle ne l'est pas.
Prenons un autre exemple, un nouvel array (numéroté) composé de fruits :
Code PHP
<?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 Cerise, tout simplement parce que in_array
a renvoiyé true
pour "Cerise" et false
pour "Myrtille".