Tuto original de FABRICE POTEC, revu par LionZion, Molokai et Raf en août 2004
Qu'est-ce qu'un array ?
La fonction array() permet de créer des tableaux
dynamiques qui seront exploités par vos scripts PHP, à la
différence d'une table mySQL, l'array est temporaire et ne reste
généré que le temps du déroulement de votre script. Attention, les tableaux dynamiques ou arrays n'ont rien à voir avec les tableaux HTML, qui servent à la mise en forme de données.
Pourquoi utiliser les Arrays et comment les
créer ?
C'est souvent un moyen très pratique de stocker de
nombreuses informations venant de d'une base de données ou tout
autres sources. Les tableaux sont aussi une méthode pour pouvoir
stocker des informations souvent utlisées (balises HTML par
exemple), et les appeller plus facilement ensuite dans le
code.
Pour comprendre le fonctionnement du tableau voici
un exemple simple qui va nous premettre de stocker des balises HTML
souvent utilisées (TABLE,TR,TD,ALIGN...) :
Code PHP
|
// ci-dessous nous stockons les balises qui servent à créer les tableaux HTML
$table = array(
'D_TABLE' => '<table border="0" cellpadding="0" cellspacing="2" width="90%" bgcolor="yellow">\n',
'D_ROWS' => '<tr><td>',
'F_ROWS' => '</tr></td>\n',
'F_TABLE' => '</table>\n'
);
// cette fois nous stockons les balises d'alignement HTML
$align = array(
'D_CENTER' => '<div align=center>\n',
'F_CENTER' => '</div>\n',
'D_RIGHT' => '<div align=right>\n',
'F_RIGHT' => '</div>\n'
);
// enfin nous utilisons les valeurs des tableaux (Array) pour créer nos tableaux HTML
echo $align['D_CENTER'];
echo $table['D_TABLE'];
echo $table['D_ROWS'];
echo 'Le texte dans la première cellule ...';
echo $table['F_ROWS'];
echo $table['D_ROWS'];
echo 'Le texte dans la deuxième cellule ...';
echo $table['F_ROWS'];
echo $table['F_TABLE'];
echo $align['F_CENTER'];
?>
|
Un avantage énorme des tableaux en PHP est vraiment la possibilité de stocker des informations une
fois pour toutes et de pouvoir les appeller quand vous le souhaitez sans avoir à retaper les lignes
de codes entières. Au même titres que les fonctions utilisateurs, il est judicieux de placer les tableaux
pré-remplis dans un fichier de type : fonctions.inc.php et de l'appeller dans toutes les pages avec un
require() ou include(). Bien-sûr ce n'est pas le cas d'un tableau que vous alimentez dynamiquement avec des
informations spécifiques au script en cours.
Voici un autre exemple simple qui consciste à alimenter un tableau avec des données mais sans spécifier
d'identifiant :
Code PHP
|
// cette fois nous stockons des valeurs sans les identifier
$prenom = array('didier','pierre','julien','xavier');
// Nous les affichons
echo $prenom[0].' - '.$prenom[1].' - '.$prenom[2].' - '.$prenom[3].'<br>';
/*
ce qui affiche :
didier - pierre - julien - xavier
*/
// Le même affichage avec une boucle for (cf exo 6)
// la fonction sizeof() renvoie le nombre d'éléments d'un tableau, ici 4
for($i=0;$i<sizeof($prenom);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...
{
echo $prenom[$i].'<br>'; // on affiche l'élément du tableau d'indice $i
}
/*
ce qui affiche :
didier
pierre
julien
xavier
*/
?>
|
Si aucun identifiant n'est spécifié, c'est le
chifre "0" par défaut qui
servira de base. A contrario, vous pouvez spécifier l'identifiant
de base, qui peut être "1"
par exemple et non pas "0",
dans ce cas les valeurs suivantes auront un identifiant égale à
l'identifiant précédent + 1
(comme
un auto_increment dans mySQL), voici ce que cela donne:
Code PHP
|
$animaux = array(1 => 'chien','chat','vache','cochon');
// L'affichage commence cette fois à partir de : [1]
echo $animaux[1].' - '.$animaux[2].' - '.$animaux[3].' - '.$animaux[4];
?>
|
Parcourir un tableau avec la boucle foreach
Vous avez vu une première methode pour parcourir un tableau : il s'agit d'utiliser une boucle for.
Mais seulement cela ne marche que pour un tableau dont les clés sont numériques ($animaux[1] par exemple).
Maintenant comment faire pour parcourir un tableau ayant des expressions litterales comme clés ? Pour cela
il suffit d'utiliser la boucle foreach. Voici un exemple qui illustre cette boucle :
Code PHP
|
$individu = array(
'Nom'=>'Dupond',
'Prenom'=>'Martin',
'Age'=>18,
'Nationalité'=>'Francais',
);
// pour parcourir ce tableau, utilisons la boucle foreach
foreach($individu as $cle=>$valeur)
{
echo $cle.' : '.$valeur.'<br>';
}
/*
Cet exemple affiche :
Nom : Dupond
Prenom : Martin
Age : 18
Nationalité : Francais
*/
?>
|
Les tableaux multi-dimensionnels
Dans l'exemple ci-dessus, à chaque tour, la boucle accède à l'élément suivant du tableau
et met dans $cle le nom de la cle de l'élément et dans $valeur la valeur de l'élément. Evidemment vous pouvez choisir d'autre noms de variable. Dans notre exemple, la boucle aura fait quatre tours.
Nous allons maintenant étudier les tableaux multi-dimensionnels.
En effet vous risquez de rencontrer parfois des tableaux qui auront cette allure la :
$constructeur['Renault']['Citadine'] = 'Clio'; par exemple ou bien
$constrcteur['Citroen']['Monospace'] = 'Picasso'; dans le même style...
Avant de passer à un exemple précis, voici un petit rappel sur le type d'une variable:
$fleur = 'rose'; On dit que $fleur est de type string (chaîne en anglais) car 'rose' est une chaîne de caractère
$loisir[1] = 'Football'; On dit alors que $loisir est de type array, puisque c'est un tableau.
Mais $loisir[1] est de type string car 'Football' est une chaîne de caractère, vous comprenez la subtilité ?
(essaiez de considérer dans votre tête $loisir[1] comme une seule variable, un peu comme si s'était $loisir1 ... ).
Si vous avez compris ça, alors vous n'aurez pas de mal à comprendre les tableaux à plusieurs dimensions.
En effet, il suffit de comprendre que chaque élément du tableau peut lui même être un tableau, et ce jusqu'à l'infini...
Reprenons notre premier exemple:
$constructeur est un tableau
$constructeur['Renault'] est aussi un tableau puisque il des clés, dont la clé 'Citadine'
mais $constructeur['Renault']['Citadine'] est de type string car 'Clio' est une chaîne de caractère.
Petite astuce: pour connaitre le type d'une variable, utlisez la fonction gettype()
Par exemple, echo gettype($constructeur['Citroen']); affichera Array
Sachez aussi qu'il existe d'autres types de variable :boolean (true ou false),integer (nombre entier : 1,2 ,..) ou encore object (cf cours Classes et Objets),
Maintenant vous vous en doutez, il va se poser un problème lorsque que vous voudrez parcourir un
tableau multi-dimensionnel. En effet si vous savez que le tableau n'a qu'un seul niveau ($tab['maison'] par exemple),
alors vous allez utiliser une boucle foreach. Et puis si le tableau a deux niveaux ($tab['maison']['piece'] par exemple)
alors vous allez devoir à nouveau faire deux boucles foreach incluses l'une dans l'autre pour parcourir les deux niveaux du tableau.
Ce qui pose problème lorsqu'on ne connaît pas le nombre de niveau d'un tableau. pur cela il faut utiliser une fonction dite récursive,
c'est à dire une fonction qui va être capable de parcourir tout un tableau quel que soit son nombre de niveaux. Pour rappel,
récursif signifie ce qui peut être répété un nombre infini de fois. Voici donc un exemple de fonction récursive pour parcourir un tableau,
utilisant le tableau que l'on a vu précédemment. Pour plus de détails sur les fonctions en php, je vous invite à lire le tutorial
sur les fonctions dans la partie "+ de php".
Code PHP
|
// $constructeur contient la gamme Renault et Citroen
// on se contentera de deux constructeurs : ça suffira pour l'exemple :)
$constructeur = array();
$constructeur['Renault']['Citadines'] = array('Twingo','Clio');
$constructeur['Renault']['Berlines'] = array('Megane','Laguna');
$constructeur['Renault']['Monospaces'] = array('Scenic','Espace');
$constructeur['Citroen']['Citadines'] = 'Saxo';
$constructeur['Citroen']['Berlines'] = array('Xsara','Xantia');
$constructeur['Citroen']['Monospaces'] = array('Picasso','Evasion');
function afficher_tableau($tableau)
{
// on fait une boucle qui lit les éléments du tableau
foreach ($tableau as $cle=>$valeur)
{
// si l'un des éléments est lui même un tableau
// alors on applique la fonction à ce tableau
if(is_array($valeur))
{
// on affiche le nom de la clé et
// le début d'une liste pour
// décaler le contenu vers la droite
echo $cle.' : <ul>';
// ici se réalise la récursivité
// c'est à dire qu'on applique la fonction
// à l'élément en cours car c'est lui aussi un tableau
afficher_tableau($valeur);
// on ferme la liste
echo '</ul>';
}
// si ce n'est pas un tableau
// alors on affiche le contenu de l'élément
else
{
echo $cle.' = '.$valeur.' <br>';
}
}
}
afficher_tableau($constructeur);
/*
ce qui va afficher :
Renault :
Citadines :
0 = Twingo
1 = Clio
Berlines :
0 = Megane
1 = Laguna
Monospaces :
0 = Scenic
1 = Espace
Citroen :
Citadines = Saxo
Berlines :
0 = Xsara
1 = Xantia
Monospaces :
0 = Picasso
1 = Evasion
*/
?>
|