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);
Le résultat produit par ce code est inattendu :
Array ( [0] => a [1] => b [2] => c [3] => c )
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 :
À la fin de la première boucle 'foreach' (itérations de référence), $v contient toujours une référence à $a[3] ('d').
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);
Cela donnera le résultat attendu :
Array ( [0] => a [1] => b [2] => c [3] => d )
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!