Maison >développement back-end >tutoriel php >Comment le passage par référence de PHP dans les boucles « foreach » affecte-t-il la modification des éléments du tableau ?

Comment le passage par référence de PHP dans les boucles « foreach » affecte-t-il la modification des éléments du tableau ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 12:42:25864parcourir

How Does PHP's Pass by Reference in `foreach` Loops Affect Array Element Modification?

PHP Pass by Reference dans foreach

Comprendre Pass by Reference

PHP a deux variables types : variables normales et variables de référence. L'attribution d'une référence d'une variable à une autre variable crée une variable de référence. La variable devient un alias pour la variable référencée.

Passage par référence dans les boucles Foreach

Dans une boucle foreach, la syntaxe foreach ($a as &$v) transmet une référence à chaque élément du tableau à la variable $v. Cela signifie que toute modification apportée à $v à l'intérieur de la boucle modifiera également l'élément du tableau d'origine.

Explication de l'extrait de code

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v.PHP_EOL;
}

Dans ce code :

  1. Le tableau $a contient quatre éléments : "zéro", "un", "deux" et 'trois'.
  2. La première boucle foreach parcourt chaque élément et transmet une référence à chaque élément à $v.
  3. Aucune modification n'est apportée à $v dans cette boucle, donc les éléments du tableau restent inchangés.
  4. La deuxième boucle foreach parcourt à nouveau chaque élément, mais cette fois, une variable normale $v contient la valeur de chaque élément. element.
  5. La sortie sera :
zero
one
two
two

Raison de la sortie

Après la première boucle foreach, l'élément $ a[3] devient une variable de référence puisqu'elle est référencée par $v. Par conséquent, lorsqu'une nouvelle valeur est attribuée à $v dans les itérations suivantes, $a[3] est également modifié.

Puisque $a[3] est désormais une variable de référence, changeant sa valeur dans la deuxième boucle foreach affecte toutes les autres itérations de la boucle. Par conséquent, la dernière itération imprime « deux » au lieu de « trois ».

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn