SOMMAIRE
1 Les variables tableaux 2
2 Les tableaux numérotés ou indexés 2
3 Afficher les valeurs une à une d’un tableau numéroté 3 4 Afficher toutes les valeurs d’un tableau numéroté 4
5 Présentation des tableaux associatifs 6
6 Création de tableaux associatifs 6
7 Afficher les valeurs d’un tableau associatif 7
8 Les tableaux multidimensionnels – Principe 8
9 Création d’un tableau à 2 dimensions 9
10 Récupérer des valeurs dans un tableau à 2 dimensions 9 11 Récupérer toutes les valeurs dans un tableau à 2 dimensions 10 12 Afficher rapidement un tableau avec la fonction print_r() 12
13 Dessiner un tableau en HTML 13
14 Remplir un tableau avec le contenu d’un array en PHP 14
1. Les variables tableaux :
Les variables de type tableau, ou variables array en anglais sont un type particulier de variables puisque celles-ci peuvent contenir plusieurs valeurs à la fois.
Pour créer un tableau en PHP, nous allons utiliser la fonction array(). Les arguments que nous allons passer à cette fonction vont dépendre du type de tableau que nous voulons créer.
En effet, il existe trois types de tableaux différents en PHP :
• Les tableaux numérotés ou indexés ;
• Les tableaux associatifs ;
• Les tableaux multidimensionnels.
Nous allons étudier chacun de ces trois types de tableaux PHP dans la suite de ce cours.
Dans tous les cas, nous placerons le résultat de la fonction array() dans une variable qui deviendra alors de fait une variable tableau.
2. Les tableaux numérotés ou indexés :
Les tableaux indexés correspondent au type de tableaux le plus facile à créer en PHP.
Le principe est le suivant : nous allons passer différentes valeurs en arguments de notre fonction array(), et celle-ci va automatiquement attribuer des indices (qu'on appelle également index ou clefs) numérotés uniques pour chaque valeur, en commençant par l’indice zéro.
Ainsi, la première valeur spécifiée en argument de array() va portera l’indice 0, la seconde valeur aura l’indice 1, la troisième portera l’indice 2, etc.
Ce système d’association valeur / indice est typique des tableaux et va nous permettre par la suite de récupérer facilement une valeur (puisque chaque valeur d’un tableau est associée à une clef unique).
Il y a deux manières de créer un tableau indexé en PHP : soit on laisse PHP
et array() assigner automatiquement les indices à chaque valeur de notre tableau, soit on choisit nous même les indices à associer à chaque valeur.
Prenons immédiatement un exemple utilisant chaque méthode.
Comme vous pouvez le voir, on utilise array() pour créer notre première variable tableau $prenoms. Les indices sont alors assignés automatiquement.
Pour notre deuxième tableau $fruits, on choisit d’assigner les indices à chaque valeur manuellement.
Dans ce cas, nous allons créer et remplir notre variable tableau valeur par valeur et nous n'avons plus besoin d’utiliser la fonction array(). On va à chaque fois assigner une valeur à l’indice de notre choix de notre tableau. Cet indice doit être précisé entre crochets.
Ainsi, on choisit ici d’associer la valeur "fraise" à l’indice 0, la valeur "framboise" à l’indice 2 et la valeur "myrtille" à l’indice 5.
Comme vous pouvez le constater, les indices n’ont pas strictement besoin d’être suivis, même si il y a généralement peu d’intérêt à sauter des numéros d’indices (et c’est même non recommandé).
Evidemment, on va pouvoir stocker tous types de valeurs dans nos variables tableaux, comme des chiffres entre autres. Une nouvelle fois, nous n’aurons besoin des guillemets ou apostrophes que lorsqu’on souhaite stocker des chaines de caractères.
3. Afficher les valeurs une à une d’un tableau numéroté :
Pour afficher les éléments d’un tableau numéroté un à un, c’est très simple : il suffit de préciser l’indice (entre crochets) correspondant à la valeur que l’on souhaite afficher.
Reprenons notre exemple précédent et affichons quelques valeurs :
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$prenoms= array('Pierre','Paul','Jacques');
$fruits[0]='fraise';
$fruits[2]='framboise';
$fruits[5]='myrtille';
?>
</body>
</html>
4. Afficher toutes les valeurs d’un tableau numéroté :
Pour afficher toutes les valeurs d’un tableau numéroté d’un coup, nous allons cette fois-ci devoir utiliser une boucle for.
Nous allons boucler sur le nombre d’éléments et les indices de notre tableau et nous allons récupérer une nouvelle valeur chaque nouveau passage dans la boucle.
La façon la plus simple de récupérer la taille (c’est-à-dire le nombre d’éléments) d’un tableau est d’utiliser la fonction count() qui va tout simplement prendre un tableau en argument et va retourner le nombre d’éléments de ce tableau.
Une fois qu’on sait comment récupérer la taille de notre tableau, nous n’avons plus qu’à créer notre boucle for.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$prenoms= array('Pierre','Paul','Jacques');
$fruits[0]='fraise';
$fruits[2]='framboise';
$fruits[5]='myrtille';
echo $prenoms[0]. '<br>';
echo $prenoms[2]. '<br>';
echo $fruits[5];
?>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$prenoms= array('Pierre','Paul','Jacques');
$fruits[0]='fraise';
$fruits[2]='framboise';
$fruits[5]='myrtille';
echo 'Nb d\'éléments dans $prenoms : ' .count($prenoms).'<br>';
echo 'Nb d\'éléments dans $fruits : ' .count($fruits);
?>
</body>
</html>
Regardons cette boucle ensemble. Tout d’abord, on récupère la taille de notre
tableau $prenoms dans une variable $tailleP. La variable $tailleP contient donc le nombre 3.
Ensuite, on va boucler sur une variable $x dont la valeur va suivre celle des indices de notre tableau.
On commence donc avec $x = 0 et, lors du premier tour dans notre boucle, on affiche donc la valeur correspondant à $prenoms[0], qui est "Pierre".
Dans notre deuxième tour de boucle, $x = 1 et c’est la valeur correspondant à la clef 1 qui est affichée, c’est-à-dire "Paul".
On sort de notre boucle dès que $x = $prenoms. En effet, rappelez vous que les indices d’un tableau numéroté commencent à 0.
Notre tableau $prenoms contient trois éléments, portant donc les indices 0, 1 et 2. On veut donc bien $x < $tailleP (puisque $tailleP contient 3).
Notez qu’une telle boucle ne fonctionnera pas bien si vous attribuez manuellement des indices à votre tableau et que vous sautez des numéros.
Dans ce cas là, il faudra plutôt utiliser une boucle foreach dans sa syntaxe la plus simple, comme ceci :
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$prenoms= array('Pierre','Paul','Jacques');
$tailleP=count($prenoms);
for($x=0; $x<$tailleP;$x++){
echo $prenoms[$x]. '<br>';
}
?>
</body>
</html>
La boucle foreach est une boucle qui a été spécialement créée pour afficher les valeurs des tableaux. Cependant, elle est moins rapide à exécuter qu'une boucle for, c'est pour cela qu'on préférera utiliser une boucle for tant que possible.
Ici, on boucle sur les valeurs de notre tableau. Pour cela, j'ai créé une variable $valeur.
Notez que j'aurais pu aussi bien appeler cette variable $x ou $toto, cela n'a pas d'importance.
Ce que vous devez comprendre, ici, c'est que la boucle foreach va récupérer chaque valeur de notre tableau $fruits et va placer ces valeurs dans la variable $valeur.
A chaque nouveau tour de boucle, foreach récupère une nouvelle valeur
qu'on echo immédiatement jusqu'à arriver à la dernière valeur de notre tableau.
5. Présentation des tableaux associatifs :
On appelle tableau associatif un tableau qui va associer des clefs textuelles (plutôt que numérotées) à ses différentes valeurs.
Les tableaux associatifs vont être intéressants parce qu’on va pouvoir choisir une clef qui fait du sens par rapport à une valeur stockée.
Une nouvelle fois, chaque clef d’un tableau doit être unique afin de pouvoir récupérer la valeur associée.
6. Création de tableaux associatifs :
Il existe deux façons différentes de créer des tableaux associatifs en PHP qui utilisent des syntaxes différentes.
Créons immédiatement deux tableaux associatifs en utilisant chacune des deux méthodes.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$fruits[0]='fraise';
$fruits[2]='framboise';
$fruits[5]='myrtille';
foreach($fruits as $valeur){
echo $valeur. '<br>';
?>
</body>
</html>
Pour créer notre premier tableau $age, nous utilisons la fonction array() et l’opérateur d’association => pour associer chaque clef textuelle à une valeur.
Faites bien attention, les clefs du premier tableau sont bien "Pierre", "Paul" et "Jean" tandis que les valeurs associées à ces clefs sont 25, 20 et 32.
Nous utilisons une autre méthode pour créer notre tableau $sport. Ici, nous créons le tableau « à la main », valeur par valeur.
Notez qu’on utilise à nouveau les prénoms "Pierre" et "Paul" comme clefs. Cela n’a pas d’incidence étant donné que les clefs appartiennent bien à deux tableaux totalement différenciés.
7. Afficher les valeurs d’un tableau associatif :
Pour afficher les valeurs d’un tableau associatif une à une, il va nous suffire une nouvelle fois d’utiliser les index des tableaux.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$age=array('Pierre'=>25, 'Paul'=>20, 'Jean'=>32);
$sport['Pierre']='trail';
$sport['Paul']='natation';
?>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$age=array('Pierre'=>25, 'Paul'=>20, 'Jean'=>32);
$sport['Pierre']='trail';
$sport['Paul']='natation';
echo 'Age de Pierre : ' .$age['Pierre'].'<br>';
echo 'Sport de Pierre : ' .$sport['Pierre'].'<br>';
?>
</body>
</html>
Pour afficher toutes les valeurs d’un tableau associatif d’un coup, nous allons cette fois-ci obligatoirement devoir utiliser une boucle foreach qui est une boucle créée spécialement pour cela.
Le principe de la boucle foreach avec les tableaux associatifs est de boucler sur les paires index / valeur d’un tableau.
Commençons par présenter la syntaxe de la boucle foreach dans le cadre de notre exemple actuel. Nous expliquerons cette syntaxe après.
Ce que vous devez lire quand vous voyez ce code est « pour chaque élément de notre tableau $age décomposé en tant que clef => valeur, afficher le texte… ».
Ici, j’ai utilisé des variables $index et $valeur pour que l’ensemble soit plus clair, mais j’aurais aussi bien pu leur donner les noms $x et $y.
Ce que vous devez bien comprendre ici c’est qu’à chaque tour de boucle la valeur de l’élément actuel va être stockée dans la variable $valeur.
8. Les tableaux multidimensionnels – principe :
Un tableau multidimensionnel est un tableau contenant lui même un ou plusieurs autres tableaux en valeurs.
Nous allons pouvoir avoir plusieurs « dimensions » de tableaux multidimensionnels.
On appelle tableau à deux dimensions un tableau contenant lui même un ou plusieurs autres tableaux.
On appelle tableau à trois dimensions un tableau contenant un ou plusieurs tableaux contenant eux-mêmes un ou plusieurs tableaux.
Le PHP sait tout à fait travailler avec des tableaux à 2, 3, 4, 5 dimensions et même plus.
Cependant, il est conseillé de ne pas stocker trop de tableaux dans d’autres, tout simplement car à partir d’un moment cela devient incompréhensible.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$age=array('Pierre'=>25, 'Paul'=>20, 'Jean'=>32);
foreach($age as $index => $valeur){
echo $index. ' a ' .$valeur. ' ans<br>';
}
?>
</body>
</html>
Notez que le nombre de dimensions d’un tableau va indiquer le nombre d’indices nécessaires pour accéder à une valeur. Nous allons expliquer cela immédiatement.
9. Création d’un tableau à deux dimensions : Créons un premier tableau à deux dimensions.
Pour rappel, un tableau à deux dimensions est un tableau contenant lui même un ou plusieurs tableaux en valeurs.
Ici, notre tableau $inscrits est un tableau à deux dimensions : il contient lui même trois autres tableaux qui ne contiennent que des valeurs simples.
Notez que chaque "sous" tableau est également avant tout une valeur du tableau $inscrits, il faut donc les séparer par une virgule.
Dans notre exemple, nous avons écrit les différents tableaux sur des lignes différentes pour une meilleure visibilité.
Vous pouvez également noter que je n'ai créé ici que des tableaux numérotés pour simplifier la création et les explications et qu'on puisse se concentrer complètement sur l'aspect multidimensionnel de notre tableau.
Passons immédiatement aux choses intéressantes et interrogeons-nous sur la façon de récupérer les différentes valeurs des trois tableaux contenus dans $inscrits.
10. Récupérer des valeurs dans un tableau à deux dimensions :
Pour récupérer une valeur dans un tableau à une dimension, il suffisait d’indiquer une clef qui représentait finalement la "ligne" (de notre représentation visuelle) où était située la valeur en question (la clef 0 représente la première ligne, etc.).
Pour récupérer une valeur dans un tableau à deux dimensions, nous allons procéder exactement de la même façon à part que cette fois-ci nous allons devoir préciser deux clefs représentant la ligne et la colonne dans lesquelles se situe la valeur à récupérer.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$inscrits=array(
array('Samuel', 25, '[email protected]'), array('Paul', 20, '[email protected]'), array('Jacques', 32, '[email protected]') );
?>
</body>
</html>
Par exemple, si je veux récupérer la deuxième valeur du premier tableau contenu
dans $inscrits, j’indiquerai $inscrits[0][1]. La valeur 0 représente la première ligne, c’est-à- dire la ligne où se situent toutes les valeurs du premier sous tableau contenu
dans $inscrits et 1 représente la deuxième colonne ; la colonne où se situe la valeur "25" en particulier.
11. Récupérer toutes les valeurs d’un tableau à deux dimensions :
Pour récupérer toutes les valeurs d’un tableau à deux dimensions d’un coup, nous allons par exemple pouvoir utiliser deux boucles for imbriquées l'une dans l'autre.
La première boucle for va passer en revue les valeurs de notre tableau à deux dimensions, c’est-à-dire les « sous tableaux » tandis que la deuxième boucle for va aller récupérer les valeurs de chaque sous tableau en soi.
Voyons en pratique comment cela va fonctionner :
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$inscrits=array(
array('Samuel', 25, '[email protected]'), array('Paul', 20, '[email protected]'), array('Jacques', 32, '[email protected]') );
echo 'Première valeur du premier tableau : ' .$inscrits[0][0];
echo '<br>Deuxième valeur du premier tableau : ' .$inscrits[0][1];
echo '<br>première valeur du deuxième tableau : ' .$inscrits[1][0];
echo '<br>première valeur du troisième tableau : ' .$inscrits[2][0];
?>
</body>
</html>
La première boucle for va boucler sur les valeurs de notre tableau principal (c'est à dire sur nos sous tableaux) et va contenir une deuxième boucle qui va boucler sur les valeurs de chaque sous tableau.
Pour notre première boucle for, on utilise une variable $ligne dont on va se resservir pour définir notre premier index (regardez la ligne $inscrits[$ligne][$col]).
Cette variable $ligne va nous servir à cibler nos lignes, ou nos sous tableaux si vous préférez. Comme on a trois sous tableaux, on boucle sur les valeurs 0, 1 et 2.
Lors du premier passage dans la première boucle for, $ligne vaut 0. On echo "Membre n°1"
et on ouvre un élément ul.
Toujours dans ce premier tour de boucle, on rentre dans notre deuxième boucle for qui va elle boucler sur une variable $col qui va représenter les valeurs de nos tableaux.
Comme on a également trois valeurs dans chaque sous tableau, on veut boucler pour $col compris entre 0 et 2.
Lors du premier tour dans cette deuxième boucle, on a donc $ligne = 0 et $col = 0.
On echo la valeur correspondant à $inscrits[0][0] à l’intérieur d’un premier élément de liste li.
Ensuite, on effectue un second tour dans notre deuxième boucle. Notre variable $ligne vaut toujours 0 car vous devez bien comprendre qu’on est toujours dans le premier tour de notre première boucle (on n’effectuera un deuxième tour dans notre première boucle qu’une fois sorti de la deuxième boucle qui est contenue dans cette première).
Lors de ce second tour dans la deuxième boucle, on a donc $ligne = 0 et $col = 1. On affiche la valeur correspondant à $inscrits[0][1] dans un nouvel élément de liste li.
On effectue un troisième tour dans notre deuxième boucle de la même façon puis on sort enfin de cette boucle.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$inscrits=array(
array('Samuel', 25, '[email protected]'), array('Paul', 20, '[email protected]'), array('Jacques', 32, '[email protected]') );
for($ligne=0; $ligne<3; $ligne++){
$n=$ligne+1;
echo 'Membre n°' .$n. '<br><ul>';
for($col=0;$col<3;$col++){
echo '<li>' .$inscrits[$ligne][$col]. '</li>';
}
echo '</ul>';
}
?>
</body>
</html>
Lorsqu’on sort de la deuxième boucle, on echo une balise fermante pour notre liste ul et on repart pour un deuxième tour dans notre première boucle.
Lors de ce deuxième tour, $ligne vaut 1 et on rentre à nouveau dans la deuxième boucle.
On a donc d’abord $ligne = 1 et $col = 0 ; on echo $inscrits[1][0] et on repart pour un
second tour dans notre deuxième boucle et etc. jusqu’à sortir de notre première boucle après le troisième tour de boucle.
12. Afficher rapidement un tableau avec la fonction print_r() :
On va également pouvoir afficher n’importe quel type de tableau (numéroté, associatif, multidimensionnel) rapidement avec la fonction PHP print_r().
Cette fonction n’est pas utilisée pour un affichage final pour les visiteurs mais généralement pour le débogage car l’affichage va montrer tout le code sans aucune mise en forme.
Comme elle peut s’avérer intéressante pour nous, développeurs, je tenais à vous la présenter.
On va généralement utiliser cette fonction avec l’élément HTML pre pour avoir un meilleur affichage du tableau que l’on souhaite afficher (je vous rappelle que preva permettre deconserver la mise en forme de notre code).
La fonction PHP print_r() va prendre en argument le tableau que l’on souhaite afficher.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<?php
$inscrits=array(
array('Samuel', 25, '[email protected]'), array('Paul', 20, '[email protected]'), array('Jacques', 32, '[email protected]') );
echo 'Sans pre : <br><br>';
print_r($inscrits);
echo '<br><br><br>';
echo 'Avec pre : <br><pre>';
print_r($inscrits);
echo '</pre>';
?>
</body>
</html>
13. Dessiner un tableau en HTML :
La balise <table> permet de créer un tableau. Il faudra utiliser la balise <tr> pour créer une nouvelle ligne dans le tableau. Entre les balises <tr> et </tr> nous mettrons nos cellules grâce aux balises <td>. Entre les balises <td> et </td> nous mettrons le contenu de la case (texte, image...).
La balise <td> peut être remplacée par <th> si la case est un intitulé de colonne.
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<table>
<tr>
<th>Prénom</th>
<th>Nom</th>
<th>Profession</th>
</tr>
<tr>
<td>Mike</td>
<td>Stuntman</td>
<td>Cascadeur</td>
</tr>
<tr>
<td>Mike</td>
<td>Pink</td>
<td>Programmeur</td>
</tr>
</table>
</body>
</html>
On peut afficher les bordures des cellules avec l'attribut border placé dans la balise table.
14. Remplir un tableau avec le contenu d’un array en PHP:
<!DOCTYPE html>
<html>
<head>
<title>Titre de la page</title>
<meta charset=”utf-8”>
</head>
<body>
<table border = “1”>
<tr>
<th>Prénom</th>
<th>Nom</th>
<th>Profession</th>
</tr>
<tr>
<td>Mike</td>
<td>Stuntman</td>
<td>Cascadeur</td>
</tr>
<tr>
<td>Mike</td>
<td>Pink</td>
<td>Programmeur</td>
</tr>
</table>
</body>
</html>
<?php
$inscrits=array(
array('Samuel', 25, '[email protected]'), array('Paul', 20, '[email protected]'), array('Jacques', 32, '[email protected]') );
echo '<table border="1">';
for ($i=0; $i<3; $i++) {
echo '<tr>';
for ($j=0; $j<3; $j++) {
echo '<td style="border:1px solid black">';
echo $inscrits[$i][$j];
echo '</td>';
} echo '</tr>';
} echo '</table>';
?>