foreach
Le mot-clé "foreach" est une structure de boucle en PHP permettant d'itérer sur des arrays et des objects. Découvrez sa syntaxe et son utilisation.
La boucle foreach en PHP
foreach est la boucle dédiée de PHP pour itérer sur des arrays et des objects. Contrairement à une boucle for, elle n'a pas besoin d'un compteur ni d'un index — elle parcourt automatiquement chaque élément, un par un, ce qui en fait la façon la plus courante et la moins sujette aux erreurs de traiter une collection en PHP.
Ce chapitre couvre les deux formes de foreach, l'itération par référence, le déballage des arrays imbriqués avec list(), le piège le plus courant, et quand choisir foreach plutôt que les autres boucles PHP.
Syntaxe
foreach possède deux formes.
Valeur seule — quand seule la valeur de chaque élément vous intéresse :
foreach ($array as $value) {
// do something with $value
}Clé et valeur — quand vous avez également besoin de la clé de l'array (indispensable pour les arrays associatifs) :
foreach ($array as $key => $value) {
// do something with $key and $value
}À chaque passage, PHP copie l'élément courant dans $value (et sa clé dans $key), puis avance vers l'élément suivant jusqu'à ce que l'array soit épuisé.
Itérer sur un array indexé
Itérer sur un array associatif
Avec la forme $key => $value, vous obtenez les deux moitiés de chaque paire :
<?php
$person = ["name" => "John", "age" => 30, "city" => "New York"];
foreach ($person as $key => $value) {
echo $key . ": " . $value . PHP_EOL;
}
// Output:
// name: John
// age: 30
// city: New YorkModifier des valeurs par référence
Par défaut, $value est une copie, donc la modifier à l'intérieur de la boucle n'affecte pas l'array d'origine. Préfixez-la avec & pour itérer par référence et répercuter les modifications :
<?php
$prices = [10, 20, 30];
foreach ($prices as &$price) {
$price *= 2; // modifies the array in place
}
unset($price); // important: break the reference
print_r($prices);
// Output:
// Array
// (
// [0] => 20
// [1] => 40
// [2] => 60
// )Attention : faites toujours
unset($price)après une boucle par référence. La variable pointe toujours vers le dernier élément, donc une affectation ultérieure à$price— ou un secondforeachréutilisant le même nom — corromprait silencieusement l'array.
Déballer des arrays imbriqués avec list()
Lorsque chaque élément est lui-même un array, vous pouvez le déstructurer en ligne avec list() (ou la syntaxe courte [] disponible depuis PHP 7.1+) :
<?php
$points = [[1, 2], [3, 4], [5, 6]];
foreach ($points as [$x, $y]) {
echo "x=$x, y=$y" . PHP_EOL;
}
// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6Quand utiliser foreach
- Utilisez
foreachpour tout array ou itérable dont vous voulez parcourir chaque élément — c'est le choix le plus lisible et il ne peut pas dépasser les limites de l'array. - Utilisez une boucle
forquand vous avez besoin d'un contrôle précis sur le compteur (saut d'éléments, pas de 2, décompte). - Utilisez
whilequand le nombre d'itérations n'est pas connu à l'avance et dépend d'une condition.
Vous pouvez également quitter un foreach prématurément avec break ou sauter une itération avec continue, exactement comme dans les autres boucles.