Alain Barraud Mémento informatique  
 
Accueil Logithèque - SE Photo - vidéo Internet - protocoles Site Web PC - Réseau Archives
Page ouverte le 25/02/2010
retour sommaire PHP
Logo PHP

Les tableaux


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 :
NomValeur
$prenomNicole
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
0François
1Michel
2Nicole
3Véronique
4Benoî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é.
erreur 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.
erreur 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');
?>
alt 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
prenomFrançois
nomDupont
adresse3 Rue du Paradis
villeMarseille

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'];
?>

question 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".
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.
Reprenons l'array avec les fruits :
Code PHP
<?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;
?>
erreur Ne pas oublier qu'un array numéroté commence à 0 !
C'est pourquoi "Banane" se trouve en position 0.

Il y a d'autres fonctions pour faire une recherche dans un array, ici on a vu les principales.