Maison > développement back-end > tutoriel php > Pourquoi ma boucle PHP « foreach » produit-elle des résultats inattendus lors de l'utilisation du passage par référence ?

Pourquoi ma boucle PHP « foreach » produit-elle des résultats inattendus lors de l'utilisation du passage par référence ?

Linda Hamilton
Libérer: 2024-12-25 00:01:11
original
179 Les gens l'ont consulté

Why Does My PHP `foreach` Loop Produce Unexpected Results When Using Pass-by-Reference?

Passage par référence dans foreach : comprendre le comportement inattendu

La boucle PHP foreach parcourt chaque élément d'un tableau, mais dans certains cas , sa sortie peut être surprenante. Considérez le code suivant :

$a = ['zero', 'one', 'two', 'three'];

foreach ($a as &$v) {

}

foreach ($a as $v) {
  echo $v . PHP_EOL;
}
Copier après la connexion

Il est prévu que le résultat soit « zéro », « un », « deux » et « trois ». Cependant, si vous exécutez ce code, vous obtiendrez « zéro », « un », « deux », « deux » à la place.

Ce comportement inattendu découle du concept PHP de variables par référence. Dans la première boucle foreach, nous utilisons l'opérateur de référence "&" pour créer une variable de référence ($v) pour chaque élément du tableau $a. Cela signifie que toute modification apportée à $v affectera également l'élément correspondant dans $a.

Initialement, tous les éléments de $a sont des variables normales. Cependant, après la première boucle, seul $a[3] reste une variable de référence. En effet, lors de l'itération dans le tableau, la variable de référence précédente ($v) est écrasée par chaque nouvel élément.

Dans la deuxième boucle, lorsque nous faisons écho à $v, elle pointe vers $a[3], qui a été défini sur « deux » lors de l'itération précédente. Par conséquent, « deux » est repris au lieu de « trois » dans la dernière itération.

En comprenant la différence entre les variables normales et les variables de référence, et comment elles interagissent dans une boucle foreach, nous pouvons éviter de tels comportements inattendus et assurez-vous que notre code fonctionne comme prévu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal