diff --git a/language/control-structures/foreach.xml b/language/control-structures/foreach.xml index 6cc9f91b28..c5f78a682a 100644 --- a/language/control-structures/foreach.xml +++ b/language/control-structures/foreach.xml @@ -1,6 +1,6 @@ - + @@ -8,18 +8,21 @@ La structure de langage foreach fournit une façon simple de - parcourir des tableaux. foreach ne fonctionne que pour les tableaux - et les objets, et émettra une erreur si vous tentez de l'utiliser sur une - variable de type différent ou une variable non initialisée. Il existe - deux syntaxes : + parcourir des array et objets Traversable. + foreach générera une erreur lorsqu'il est utilisé avec + une variable contenant un type de données différent ou avec une variable non initialisée. + + foreach peut éventuellement obtenir la clé de chaque élément : + $value){ - //commandes + +foreach (iterable_expression as $key => $value) { + statement_list } ]]> @@ -44,173 +47,103 @@ foreach (iterable_expression as $key => $value){ l'itération sur des objets. - - 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. - - - -]]> - - - - - - 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. Sinon, vous ressentirez le - comportement suivant : - - - - $value) { - // $arr[3] sera mis à jour avec chaque valeur de $arr... - echo "{$key} => {$value} "; - print_r($arr); -} -// ...jusqu'à ce que finalement la valeur de deuxième à dernière soit copiée sur la dernière valeur - -// sortie : -// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) -// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) -// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) -// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) -?> -]]> - - - - - Il est possible d'itérer la valeur d'un tableau constant par référence : - + + Utilisations courantes de <literal>foreach</literal> -]]> - - - - - - - foreach ne supporte pas la suppression des messages - d'erreur utilisant - @. - - - - - Voici quelques exemples de plus : - - - $v.\n"; - $i++; +foreach ($array as $value) { + echo "Valeur courante de \$array: $value.\n"; } -/* exemple foreach 3 : la clé et la valeur */ +/* Exemple : clé et valeur */ -$a = array( +$array = [ "un" => 1, "deux" => 2, "trois" => 3, "dix-sept" => 17 -); +]; -foreach ($a as $k => $v) { - echo "\$a[$k] => $v.\n"; +foreach ($array as $key => $value) { + echo "\$array[$key] => $value.\n"; } -/* exemple foreach 4 : tableaux multidimensionnels */ -$a = array(); -$a[0][0] = "a"; -$a[0][1] = "b"; -$a[1][0] = "y"; -$a[1][1] = "z"; +/* Exemple : tableaux clé-valeur multidimensionnels */ +$grid = []; +$grid[0][0] = "a"; +$grid[0][1] = "b"; +$grid[1][0] = "y"; +$grid[1][1] = "z"; -foreach ($a as $v1) { - foreach ($v1 as $v2) { - echo "$v2\n"; +foreach ($grid as $y => $row) { + foreach ($row as $x => $value) { + echo "Valeur à la position x=$x et y=$y : $value\n"; } } -/* exemple foreach 5 : tableaux dynamiques */ +/* Exemple : tableaux dynamiques */ -foreach (array(1, 2, 3, 4, 5) as $v) { - echo "$v\n"; +foreach (range(1, 5) as $value) { + echo "$value\n"; } ?> ]]> - - - + + + + + foreach ne prend pas en charge la possibilité de + supprimer les messages d'erreur en utilisant le + @. + + + - Extraction des tableaux internes avec list() + Extraction des tableaux internes - - Il est possible d'itérer dans un tableau de tableaux, - et d'en extraire les tableaux internes dans des variables, en fournissant - une liste list comme valeur. + Il est possible d'itérer sur un tableau de tableaux et de décomposer le tableau imbriqué + dans des variables de boucle en utilisant soit + la déstructuration de tableau + via [] ou en utilisant le constructeur de langage list comme valeur. + + + + A noter que + la déstructuration de tableau + via [] n'est possible qu'à partir de PHP 7.1.0 + + - Par exemple : + + Dans les deux exemples suivants, $a sera défini sur + le premier élément du tableau imbriqué et $b contiendra + le deuxième élément : + - @@ -227,31 +160,39 @@ A: 3; B: 4 - Vous pouvez fournir moins d'éléments dans la fonction - list qu'il n'y en a dans le tableau interne, - auquel cas, les valeurs du tableau les plus à droite seront ignorées : + Lorsqu'il y a moins de variables que d'éléments dans le tableau, + les éléments restants seront ignorés. + De même, les éléments peuvent être ignorés en utilisant une virgule : ]]> &example.outputs; @@ -270,7 +211,7 @@ $array = [ [3, 4], ]; -foreach ($array as list($a, $b, $c)) { +foreach ($array as [$a, $b, $c]) { echo "A: $a; B: $b; C: $c\n"; } ?> @@ -279,7 +220,6 @@ foreach ($array as list($a, $b, $c)) { &example.outputs; + + foreach et références + + Il est possible de modifier directement les éléments du tableau dans une boucle en précédant + $value de &. + Dans ce cas, la valeur sera assignée par + référence. + + + +]]> + + + + + + La référence à $value du dernier élément du tableau + demeure même après la boucle foreach. Il est recommandé + de détruire ces références en utilisant unset. + Sinon, le comportement suivant se produira : + + + + $value) { + // $arr[3] sera mis à jour avec chaque valeur de $arr... + echo "{$key} => {$value} "; + print_r($arr); +} +// ...jusqu'à ce que finalement l'avant-dernière valeur soit copiée sur la dernière valeur +?> +]]> + + &example.outputs; + + 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) +1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) +2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) +3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) +]]> + + + + + Itérer sur les valeurs d'un tableau constant par référence + + +]]> + + + + + + &reftitle.seealso; + + array + Traversable + iterable + list + + +