Comportement inattendu de la boucle Foreach à l'aide de références
Lors de l'utilisation de la boucle foreach de PHP avec des références, un comportement étrange peut se produire, comme le démontre l'extrait de code suivant :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Ce code est destiné à parcourir le tableau $a en utilisant une variable de référence $v dans la première boucle et une variable non-référence $v dans la deuxième boucle. Cependant, de manière surprenante, le résultat montre que le dernier élément du tableau, 'd', a été écrasé :
Array ( [0] => a [1] => b [2] => c [3] => c )
Explication du comportement
Cette inattendue le comportement est bien documenté dans la documentation de PHP. Il avertit que lors de l'utilisation de références dans une boucle foreach, la référence du dernier élément du tableau reste même après la fin de la boucle. Pour éviter ce problème, il est recommandé de supprimer la variable de référence à l'aide d'unset().
Dans notre exemple, la variable de référence $v reste une référence au dernier élément de $a après la première boucle. Lorsque la deuxième boucle parcourt $a, chaque itération de la boucle réaffecte la valeur à $v. Cependant, puisque $v est une référence au dernier élément de $a, il écrase la valeur de cet élément.
Guide étape par étape du comportement
Pour clarifier davantage, voici un guide étape par étape de ce qui se passe dans notre extrait de code :
Solution
À éviter ce problème, supprimez simplement la variable de référence $v après la première boucle :
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { }
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!