Vous les croyiez disparus ? Oubliés ? Enterrés ?
Que nenni ! Les Array reviennent, et ils sont pas contents
Plus sérieusement, les Array (ou "Variables tableaux") sont très souvent utilisés lorsque vous vous mettez à faire des scripts un petit peu plus complexes. Ils sont bien souvent la solution simple à des problèmes qui ont l'air compliqués.
Jusqu'ici, nous n'avons vu que très rapidement les Array, juste ce dont on avait besoin pour la base de données (car je vous rappelle qu'on récupère les données de la base sous forme d'array). Aujourd'hui, nous allons faire en quelque sorte la "suite" du premier chapitre sur les array. Je vous recommande d'aller
le relire d'ailleurs, histoire d'être bien à jour.
Nous allons voir dans ce chapitre comment explorer le contenu d'un array (c'est-à-dire lister tout ce qu'il y a dedans), mais nous verrons aussi comment faire des recherches dedans, et enfin nous verrons comment transformer une chaîne en un array.
Honnêtement, ce chapitre ne sera pas une révélation passionnante et vous ne saurez pas faire des trucs super-géniaux après l'avoir lu. Mais ce sont des connaissances qu'il faut avoir en PHP, car on travaille fréquemment sur les array.
Et ne vous découragez pas, parce que le meilleur est à venir
Avant de commencer à retravailler sur les array, je pense qu'il serait bien de faire un petit rappel et de vous faire faire un peu de vocabulaire, sinon vous allez vous emmêler les pinceaux bêtement
Quelques rappels
Un array, c'est une variable qui se présente sous la forme de tableau. Par exemple : $capitale['France'].
On a deux types d'array :
- Les array numérotés : chaque morceau de l'array a un numéro. Ce numéro part de 0 (ne l'oubliez pas, c'est source d'erreurs). Par exemple, $liste[0], $liste[1], $liste[2] etc...
- Les array associatifs : au lieu d'avoir des numéros, on a des "étiquettes". Chaque morceau de l'array a donc un nom. Par exemple, les array retournés par MySQL sont associatifs : $donnees['pseudo'], $donnees['message'] etc...
Je vous rappelle comment on crée un array :
Code : PHP1
2
3
4
5
6
7
8 | <?php
// On crée notre array $coordonnees
$coordonnees = array (
"Prénom" => "François",
"Nom" => "Dupont",
"Adresse" => "3, rue du Paradis",
"Ville" => "Marseille");
?>
|
Enfin, voici 2 mots de vocabulaire à connaître :
- Prénom, Nom, Adresse et Ville sont les clés. Dans un tableau associatif, une clé permet de repérer un élément.
- François, Dupont, 3, rue du Paradis et Marseille sont les valeurs. Ainsi, "François" est associé à la clé "Prénom".
Nous allons voir deux moyens d'explorer un array :
Afficher rapidement un array : print_r
La question du jour est : vous avez un array et vous vous demandez ce qu'il contient.
Pour afficher le contenu de l'array, on va utiliser la commande
print_r. C'est une sorte de
echo spécialisé dans les array.
Cette commande a toutefois un défaut : elle ne renvoit pas de code HTML comme <br /> pour les retours à la ligne. Pour bien voir les Entrées, il faut donc utiliser la balise HTML <pre> qui nous permettra d'avoir un affichage plus correct.
Je reprends l'exemple qu'on avait utilisé dans le premier chapitre sur les array. Je crée d'abord manuellement un array avec la fonction
array, puis j'affiche son contenu avec
print_r :
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
$coordonnees = array (
"Prénom" => "François",
"Nom" => "Dupont",
"Adresse" => "3, rue du Paradis",
"Ville" => "Marseille");
echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>
|
Voilà, c'est facile à utiliser du temps qu'on n'oublie pas la balise <pre>.
Vous vous demandez à quoi ça peut servir concrètement ? C'est vrai que dans la pratique, vous n'afficherez jamais le contenu d'un array à vos visiteurs (ils ne comprendraient pas, les pauvres

). En fait, ça vous servira à vous, lorsque vous testez un script qui ne marche pas, et que vous aimeriez savoir rapidement ce que contient un array.
Un autre exemple pour que vous voyiez bien comment on s'en sert : vous faites une requête à MySQL et vous aimeriez savoir rapidement ce que ça renvoit. Plutôt que de vous embêter à mettre en forme vous-même les résultats en HTML, vous faites un print_r qui vous permettra de voir rapidement ce que ça donne.
Pour cet exemple, je reprends la table
jeux_video qu'on a utilisé dans la partie II de ce cours :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");
$reponse = mysql_query("SELECT * FROM jeux_video WHERE possesseur='Patrick'");
while ($donnees = mysql_fetch_array($reponse) )
{
echo '<pre>';
print_r($donnees);
echo '</pre>';
}
mysql_close();
?>
|
Ah, d'ailleurs vous pouvez voir que les array créés par
mysql_fetch_array sont numérotés ET associatifs. On nous donne les deux. Ca fait qu'il y a pas mal de doublons, mais au moins on peut choisir si on préfère travailler sur des numérotés ou des associatifs.
Pour ma part, avec la base de données je travaille toujours sur des array associatifs, je trouve ça plus clair.
Vous vous demandez pourquoi on a mis le print_r dans la boucle while ? Tout simplement parce qu'un nouvel array est créé pour chaque entrée : il y a donc autant d'array que d'entrées dans la table ! Si on n'avait pas fait de boucle, on aurait eu seulement l'array correspondant à la première entrée !
Parcourir un array dans une boucle : foreach
print_r c'est bien beau, mais vous avez vu que ça ne vous servirait pas vraiment dans la pratique. On s'en sert juste pour rechercher des erreurs.
Par contre, la commande
foreach, elle, est vraiment utile dans les scripts. C'est une sorte de boucle for spécialisée dans les array.
foreach va passer en revue chaque ligne du tableau, et lors de chaque passage, il va mettre la valeur de cette ligne dans $element.
Je parle chinois ? Ok, alors regardez :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12 | <?php
$coordonnees = array (
"Prénom" => "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 $coordonnees.
On met donc entre parenthèses :
- D'abord le nom de l'array (ici $coordonnees)
- Ensuite le mot-clé "as" (qui signifie quelque chose comme "en tant que")
- Enfin le nom d'une variable que vous choisissez qui va contenir tour à tour chacun des éléments de l'array (ici $element).
Entre les accolades, on n'utilisera 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.
Si on veut aussi récupérer la clé de l'élément, on écrira :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12 | <?php
$coordonnees = array (
"Prénom" => "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, vous avez dans la boucle la clé ET la valeur.
Bien entendu, si vous n'avez besoin que de la valeur, il vaut mieux utiliser l'exemple précédent
Et
foreach, croyez-moi, c'est un truc vraiment pratique ! Autant vous n'utiliserez presque jamais
print_r, autant le
foreach va bientôt devenir votre meilleur ami dans vos scripts PHP !
Apprenez à vous en servir, ce n'est pas bien compliqué. Quant à moi, j'essaierai de vous le faire utiliser au cours d'un prochain chapitre ou TP...
Nous allons maintenant faire des recherches dans des array. Cela vous sera parfois très utile pour savoir si votre array contient ou non certaines informations.
Nous allons voir trois types de recherches :
- 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
Voici notre problème : on a un array, mais on ne sait pas si la clé qu'on cherche est dedans.
On va utiliser pour vérifier ça la fonction
array_key_exists.
On doit lui donner d'abord le nom de la clé à rechercher, puis le nom de l'array dans lequel on fait la recherche :
array_key_exists("Clé", $array)
La fonction renvoie un booléen, c'est à dire true (vrai) si la clé est dans l'array, et false (faux) si la clé ne se trouve pas dans l'array. Ca nous permet de faire un test facilement avec un if :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | <?php
$coordonnees = array (
"Prénom" => "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 !';
}
?>
|
Comme vous pouvez le voir, on n'a trouvé que "Nom", et pas "Pays" (logique). Seule la première condition a donc été exécutée
Vérifier si une valeur existe dans l'array : in_array
Je ne vais passer 50 ans dessus, c'est exactement pareil que
array_key_exists... mais cette fois on recherche dans les valeurs.
in_array renvoit true si la valeur se trouve dans l'array, false si elle ne s'y trouve pas.
Pour changer un peu de notre array $coordonnees, je vais créer un nouvel array (numéroté) composé de fruits
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13 | <?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 la Cerise, tout simplement parce que in_array a renvoyé true pour "Cerise" et false pour "Myrtille".
Facile, rapide, efficace
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 renvoit la fonction :
- Si elle a trouvé la valeur, array_search renvoit 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 renvoit false (comme in_array).
On reprend l'array numéroté avec les fruits (ça me donne faim tout ça

) :
Code : PHP1
2
3
4
5
6
7
8
9 | <?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;
?>
|
Je sais que je me répète, mais n'oubliez pas qu'un array numéroté commence à 0 !
Cela explique donc pourquoi "Banane" se trouve en position 0...
Voilà donc les fonctions qu'il fallait connaître pour faire une recherche dans un array.
Avec ça, vous aurez plus de contrôle sur vos array puisque vous saurez s'ils contiennent certaines valeurs et surtout
où elles se trouvent.
En PHP, il existe une fonction très pratique qui vous permet de créer un array automatiquement à partir d'une chaîne.
Supposons que l'on ait une variable $date qui contienne "05/08/1985". On aimerait extraire le jour, la date et l'année et mettre ça dans un array. A priori, c'est compliqué parce qu'on ne sait pas bien si le numéro du jour a un ou deux chiffres, pareil pour le mois, et je vous parle même pas de l'année
Mais regardez bien cette chaîne... Elle a quelque chose de particulier : elle est séparée par des slashs (
/). Le slash joue ici le rôle de
séparateur, c'est-à-dire qu'il "sépare" la chaîne en plusieurs parties.
Avec la fonction
explode, on peut transformer cette chaîne en un array à 3 éléments (on dit qu'on la fait "exploser"). Il suffit simplement d'indiquer la chaîne et le séparateur (ici le slash), et la fonction nous retourne alors un array numéroté qui contiendra le jour, le mois et la date.
Concrètement, ça nous donne :
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
$chaine_date = '05/08/1985'; // On a une chaîne
$array_chaine = explode('/', $chaine_date); // On transforme cette chaîne en array
// Puis on peut afficher le contenu de l'array
// Ici je fais un print_r, c'est plus rapide ;o)
echo '<pre>';
print_r($array_chaine);
echo '</pre>';
?>
|
C'est pas beau ça ?

Le
print_r nous permet de bien voir quelle tronche a notre array : on voit bien qu'il est découpé maintenant en 3 parties numérotées de 0 à 2. Dans un script, c'est beaucoup plus pratique de manipuler séparément le jour, le mois et la date, plutôt que toute la chaîne en entier.
Dans la pratique, on a régulièrement besoin de la fonction
explode. Il faut dire qu'elle fait si bien les choses, que la seule chose qu'on pourrait lui reprocher c'est de ne pas l'avoir connue plus tôt.
Il existe aussi une fonction implode qui fait l'inverse de explode (elle transforme un array en chaîne). Elle s'utilise de la même manière, mais on en a besoin un peu moins souvent.