Maison > développement back-end > tutoriel php > Pourquoi l'utilisation de références dans la boucle « foreach » de PHP entraîne-t-elle des modifications inattendues du tableau ?

Pourquoi l'utilisation de références dans la boucle « foreach » de PHP entraîne-t-elle des modifications inattendues du tableau ?

Linda Hamilton
Libérer: 2024-12-16 09:24:17
original
386 Les gens l'ont consulté

Why Does Using References in PHP's `foreach` Loop Lead to Unexpected Array Modifications?

Comportement des références dans une boucle 'foreach' : comprendre les modifications de tableau

En PHP, l'utilisation de références dans une boucle 'foreach' peut conduire à des résultats inattendus modifications du tableau. Ce comportement est mis en évidence dans le code suivant :

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
foreach ($a as $v) { }

print_r($a);
Copier après la connexion

Le résultat produit par ce code est inattendu :

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)
Copier après la connexion

Explication étape par étape

Pour comprendre ce comportement, il est essentiel de suivre les changements qui se produisent lors de chaque itération du 'foreach' boucle :

  • 1ère itération (itération de référence) : $v est une référence à $a[0] ('a').
  • 2ème itération (itération de référence) : $v est une référence à $a[1] ('b').
  • 3ème itération (itération de référence) : $v est une référence à $a[2] ('c').
  • 4ème itération (itération de référence) : $v est une référence à $a[3] ('d').

À la fin de la première boucle 'foreach' (itérations de référence), $v contient toujours une référence à $a[3] ('d').

  • 1ère itération (itération de valeur) : $v (toujours faisant référence à $a[3]) se voit attribuer la valeur de $a[0] ('un'). Cependant, puisque $v est une référence, il modifie $a[3] en 'a'.
  • 2ème itération (itération de valeur) : $v (toujours faisant référence à $a[3] ) reçoit la valeur $a[1] (« b »). Cela modifie à nouveau $a[3] en 'b'.
  • 3ème itération (itération de valeur) : $v (faisant toujours référence à $a[3]) se voit attribuer la valeur de $a [2] (« c »). Cela modifie à nouveau $a[3] en 'c'.
  • 4ème itération (itération de valeur) : $v (faisant toujours référence à $a[3]) se voit attribuer la valeur de $ a[3] ('c').

Ainsi, après la deuxième boucle 'foreach' (itérations de valeur), le tableau $a a été modifié avec 'c' apparaissant deux fois.

Résoudre le problème

Pour éviter ce comportement inattendu, il est recommandé de supprimer la référence après chaque itération :

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);
Copier après la connexion

Cela donnera le résultat attendu :

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)
Copier après la connexion

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