Les structures de contrôle
PHP Manual

foreach

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(1234);
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
?>
Ceci n'est possible que si le tableau itéré peut être référencé (i.e. est une variable).

Avertissement

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";
}
?>
Les exemples suivants sont aussi fonctionnellement identiques :

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(12317);

foreach (
$a as $v) {
   echo 
"Current value of \$a : $v.\n";
}

/* exemple foreach 2 : la valeur et sa clé d'index */

$a = array(12317);

$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(12345) as $v) {
    echo 
"$v\n";
}

?>


Les structures de contrôle
PHP Manual