1) Les Array II : le Retour

Transcription

1) Les Array II : le Retour
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
1 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
Les Array II : le Retour
Vous les croyiez disparus ? Oubliés ? Enterrés ?
Que nenni ! Les Array reviennent, et ils sont pas contents
Auteur : M@teo21
Créé le : 20/08/2005 à 00h19
Modifié le : 01/11/2005 à
18h39
Noter et commenter ce tutorial
Imprimer ce tutorial
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
Sommaire du chapitre :
Explorer un array
Rechercher dans un array
Transformer une chaîne en array
Q.C.M.
Explorer un array
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']
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
2 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
etc...
Je vous rappelle comment on crée un array :
Code : PHP
<?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 :
Le print_r
Le foreach
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
<?php
$coordonnees = array (
"Prénom" => "François",
"Nom" => "Dupont",
"Adresse" => "3, rue du Paradis",
"Ville" => "Marseille");
echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>
Essayer !
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_videos qu'on a utilisé dans la partie II de ce cours :
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
3 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
Code : PHP
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");
$reponse = mysql_query("SELECT * FROM jeux_videos WHERE possesseur='Patrick'");
while ($donnees = mysql_fetch_array($reponse) )
{
echo '<pre>';
print_r($donnees);
echo '</pre>';
}
mysql_close();
?>
Essayer !
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
<?php
$coordonnees = array (
"Prénom" => "François",
"Nom" => "Dupont",
"Adresse" => "3, rue du Paradis",
"Ville" => "Marseille");
foreach($coordonnees as $element)
{
echo $element . '<br />';
}
?>
Essayer !
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 :
1. D'abord le nom de l'array (ici $coordonnees)
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
4 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
2. Ensuite le mot-clé "as" (qui signifie quelque chose comme "en tant que")
3. 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
<?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 />';
}
?>
Essayer !
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...
Rechercher dans un array
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 renvoit 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
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
5 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
<?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 !';
}
?>
Essayer !
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
<?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 !';
}
?>
Essayer !
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 : PHP
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
6 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
<?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;
?>
Essayer !
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.
Transformer une chaîne en array
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
<?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>';
?>
Essayer !
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.
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
7 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
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.
Q.C.M.
A quoi sert in_array ?
n A savoir si une clé se trouve dans l'array
j
k
l
m
j A savoir si une valeur se trouve dans l'array
k
l
m
n
j A savoir la clé d'une valeur dans l'array
k
l
m
n
Lequel de ces array donne cet affichage si on en fait un print_r ?
Code : Autre
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
Venise
Rome
Prague
Tunis
n array('Venise', 'Rome', 'Prague', 'Tunis')
j
k
l
m
j array('Prague', 'Rome', 'Venise', 'Tunis')
k
l
m
n
j array('Prague', 'Rome', 'Tunis', 'Venise')
k
l
m
n
Qu'affiche ce code ?
Code : PHP
<?php
$jeu = array("Pierre", "Feuille", "Ciseaux");
if (in_array("Ciseaux", $jeu))
{
if (in_array("Puits", $jeu))
{
echo array_search("Puits", $jeu);
}
else
{
echo array_search("Feuille", $jeu);
}
}
?>
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
8 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
n Puits
j
k
l
m
j 1
k
l
m
n
j Rien du tout
k
l
m
n
Que vaut $total à la fin de ce script ?
Code : PHP
<?php
$liste_nombres = array(5, 15, 2, 7, -3);
$total = 0;
foreach($liste_nombres as $nombre)
{
$total = $total + $nombre;
}
?>
n 26
j
k
l
m
j 29
k
l
m
n
j 27
k
l
m
n
Qu'affiche ce code ?
Code : PHP
<?php
$jeu1 = array('Pierre', 'Feuille', 'Ciseaux');
$jeu_chaine = 'Portail%Pierre%Puits';
$jeu2 = explode ('%', $jeu_chaine);
$objet_cherche = 'Pierre';
if (in_array($objet_cherche, $jeu1) AND in_array($objet_cherche, $jeu2))
{
if (array_search($objet_cherche, $jeu1) == array_search($objet_cherche,
$jeu2))
{
echo 'Bim';
}
else
{
echo 'Bam';
}
}
else
{
echo 'Boum';
}
?>
n Bim
j
k
l
m
j Bam
k
l
m
n
j Boum
k
l
m
n
29/07/2007 18:22
Les Array II : le Retour - Site Web - Lecture du tutorial - Le Site du Zéro
9 sur 9
http://www.siteduzero.com/tuto-3-164-1-les-array-ii-le-retour.html
Correction !
Auteur : M@teo21
Noter et commenter ce tutorial
Imprimer ce tutorial
29/07/2007 18:22

Documents pareils