PHP 4 introduit une commande foreach, comme en Perl ou d'autres langages. C'est un moyen simple de passer en revue un tableau. Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première.
Exemple #1 Instruction foreach
foreach(array_expression as $value) commandes foreach(array_expression as $key => $value) commandes
La première forme passe en revue le tableau array_expression. À chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant).
La deuxième forme fait exactement la même chose, mais c'est la clé de l'élément courant qui est assigné à la variable $key.
Depuis PHP 5, il est possible d' itérer également des objets.
Note: Lorsque foreach démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à reset() avant foreach.
Note: A moins que le tableau soit une référence, foreach opère sur une copie du tableau spécifié et non sur le tableau lui-même. foreach affecte le pointeur interne du tableau. Ne l'utilisez pas sans le remettre à zéro avant.
Depuis PHP 5, vous pouvez modifier facilement les éléments d'un tableau en précédent $value d'un &. Ceci assignera une référence au lieu de copier la valeur.
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr vaut maintenant array(2, 4, 6, 8)
unset($value); // Stop la référence sur le dernier élément
?>
La référence de $value et le dernier élément du tableau sont conservés après l'exécution de la boucle foreach. Il est recommandé de les détruire en utilisant la fonction unset().
Note: foreach n'accepte pas l'opérateur de suppression des erreurs @.
Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique :
Exemple #2 Instruction foreach et while
<?php
$arr = array("un", "deux", "trois");
reset($arr);
while (list(, $value) = each($arr)) {
echo "Valeur : $value<br />\n";
}
foreach ($arr as $value) {
echo "Valeur : $value<br />\n";
}
?>
Exemple #3 Instruction foreachet while(2)
<?php
$arr = array("un", "deux", "trois");
reset($arr);
while (list($key, $value) = each($arr)) {
echo "Clé : $key; Valeur : $value<br />\n";
}
foreach ($arr as $key => $value) {
echo "Clé : $key; Valeur : $value<br />\n";
}
?>
Voici quelques exemples de plus :
Exemple #4 Instruction foreach et while(3)
<?php
/* exemple foreach 1 : la valeur seulement */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Current value of \$a : $v.\n";
}
/* exemple foreach 2 : la valeur et sa clé d'index */
$a = array(1, 2, 3, 17);
$i = 0; /* uniquement pour l'illustration */
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* exemple foreach 3 : la clé et la valeur */
$a = array (
"un" => 1,
"deux" => 2,
"trois" => 3,
"dix-sept" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* exemple foreach 4 : tableaux multi-dimensionnels */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* exemple foreach 5 : tableaux dynamiques */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>