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
475 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!

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