Les Tableaux Php

(Version projecteur)

Les tableaux PHP ne méritent pas véritablement le nom de tableau. On n'a pas besoin de définir la dimension du tableau à l'avance ni même le type de ses éléments !

D'autre part les indices d'un tableau php ne sont pas forcément des nombres : il peut être indicés par des chaines de caractères !

Les tableaux PHP d'un point de vue conceptuel

Un tableau PHP peut être vue comme un ensemble de paires (clef,valeur) dans lequel chaque clef ne peut figurer qu'une seule fois. Les clefs sont des nombres entiers ou des chaines de caractères et les valeurs peuvent avoir n'importe quel type.

Un tableau PHP définit donc une association entre des clefs et des valeurs, c'est un tableaux associatif.

Exemple : d'un point de vu conceptuel l'ensemble :

{ ("Berlin",49),("Londres",59),("Helsinki",69), ("Rome",83),
  ("Moscou",81), ("Atlanta",197) } 

est un tableau PHP. Cet ensemble donne le nombre de pays participant aux jeux olympiques des villes nommées.

Les noms des villes représentent ici les clefs du tableau. Dans cet exemple elles sont toutes de type chaines de caractères. On dit que le tableau est indexé par des chaines de caractères.

On aurait également pu représenter le nombre de pays participant aux jeux olympiques à une certaine année avec cette fois-ci des clefs numériques :

{(1936,49),(1948,59),(1952,69),(1960,83),(1980,81),
  (1996,197)}

Un tableau de ce type dans lequel toutes les clefs sont numériques est appelé un tableau indexé numériquement.

Remarques :

Création et initialisation d'un tableau

Affectation individuelle

Pour mettre une valeur dans un élément de tableau on écrit :

nom de variable [ clef ] = expression ; 

Exemple :

 $JO ["Berlin"]=49;

affecte la valeur 49 à l'élément du tableau $JO indexé par (dont la clef est) Berlin.

Comme vous le savez déjà, les variables PHP n'ont pas besoin d'être déclarées avant d'être utilisées. Cela s'applique également aux tableaux.

Un tableau PHP existe dès que l'on affecte une valeur à un de ses éléments.

Autrement dit, si on suppose que l'instruction $JO ["Berlin"]=49; est la première affectation à un élément du tableau $JO, alors cette affectation créé une version iniliale du tableau $JO qui ne contient pour l'instant qu'un seul élément : la paire ("Berlin",49).

On peut ensuite complèter le tableau par d'autres affectations. Par exemple :

$JO ["Berlin"]=49;
$JO ["Londres"]=59;
$JO ["Helsinki"]=69;
$JO ["Rome"]=83;
$JO ["Moscou"]=81;
$JO ["Atlanta"]=197;

Résultera en un tableau $JO de six éléments.

Affectation en bloc : la fonction array

La fonction array permet d'écrire ceci de manière plus concise. Par exemple, les six affectations précédentes peuvent être remplacées par une seule affectation de la manière suivante :

 $JO= array( "Berlin" =>49,"Londres" =>59 ,"Helsinki" =>69, 
"Rome" =>83 , "Moscou" =>81 , "Atlanta" =>197 );

La syntaxe générale de cette instruction est :

 variable = array( clef1 => valeur1, ... , clefN => valeurN );

Pour les tableaux indexés numériquement, on peut encore faire mieux. L'affectation :

 variable = array(  valeur1, ..., valeurN );

créé un tableau indicé de 0 à N-1 dont les valeur sont valeur1, ..., valeurN.

Exemple :

$Semaine = array("lundi", "mardi","mercredi",
       "jeudi","vendredi","samedi","dimanche");

Affecte à la variable $Semaine le tableau de 7 éléments :

{ (0,"Lundi"),(1,"Mardi"),(2,"Mercredi"),
(3,"Jeudi"),(4,"Vendredi"), (5,"Samedi"),(6,"Dimanche") }

Parcours des éléments d'un tableau

Il existe en PHP une structure de contrôle spécialement prévue pour parcourir les éléments d'un tableau : c'est la boucle foreach.

Supposons que l'on souhaite effectuer un certain traitement pour chaque valeur d'un tableau $T. On va choisir une variable quelconque pour stocker la valeur d'un élément particulier de $T, par exemple $v. Puis on écrira :

foreach ($T as $v )
{
   Traitement à effectuer sur $v 
}

Par exemple pour afficher tous les éléments du tableau $Semaine, on écrira :

foreach ($Semaine as $jour )
{
   echo "$jour <br>";
}

Si l'on veut en plus effectuer un traitement sur la clef de chaque élément, on utilisera une autre variante de la boucle foreach s'écrivant comme suit :

foreach ($T as $c => $v )
{
    Traitement à effectuer sur la valeur $v
    et la clef $c
}

Par exemple pour afficher les éléments du tableau $JO, en précisant à chaque fois la ville (clef) et le nombre de pays participants (valeur), on écrira :

foreach ($JO as $ville => $nbr_pays )
{
     echo "$ville : $nbr_pays <br>";
}

Exemple 1

Dans ce premier exemple de programme, on initialise en bloc un tableau $JO, puis on génère un tableau HTML pour l'afficher:

Exécuter l'exemple

Exemple 2

Dans ce deuxième exemple de programme, on initialise en bloc un tableau PHP indexé numériquement ($Semaine), puis on génère un tableau HTML pour l'afficher en utilisant la boucle foreach:

Exécuter l'exemple

Affectations particulières

Adjonction d'un élément en fin de tableau

Pour ajouter un élément de valeur $v à la fin d'un tableau $T indexé numériquement, on peut écrire :

 $T[  ]=$v;

L'indice de ce nouvel élément est calculé automatiquement par PHP : c'est le plus grand indice du tableau augmenté de 1.

Affectation d'un tableau à une variable

PHP permet d'affecter globalement un tableau à une variable. Donc si $T est un tableau PHP, on peut écrire :

 $T2 = $T;

après l'exécution de cette instruction $T2 contiendra une copie exacte de $T.

Quelques fonctions utiles

Nombre d'éléments d'un tableau

La fonction count permet de compter le nombre d'éléments d'un tableau. Plus précisément si $T est un tableau, alors count($T) est le nombre d'éléments de $T. En particulier l'expression logique count($T)==0 sera vraie si le tableau $T est vide.

Présence d'une valeur dans un tableau

La fonction in_array permet de tester si une valeur donnée est présente dans un tableau. Plus précisement, in_array (expression,$T) est vrai si et seulement si la valeur de l'expression est une des valeurs du tableau $T.

Clefs d'un tableau

La fonction array_keys permet d'obtenir toutes les clefs d'un tableau. Plus précisement, array_keys ($T) est un tableau (indexé numériquement à partir de 0) dont les valeurs sont les clefs du tableau $T.