Pourquoi la valeur de l'élément est-elle répétée dans le tableau lors de l'utilisation d'une référence à l'intérieur de Foreach ?
Considérez le code PHP suivant :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Étonnamment, le résultat révèle que la valeur du dernier élément a écrasé les valeurs des autres éléments, ce qui entraîne dans :
Array ( [0] => a [1] => b [2] => c [3] => c )
Expliquer la bizarrerie
Ce comportement est un aspect documenté de PHP qui découle de l'utilisation d'une référence (&) dans la première boucle foreach .
Lors de la première boucle, chaque élément du tableau est affecté à $v par référence. Lorsque $v est modifié, cela change l'élément référencé dans le tableau d'origine. Ainsi, lorsque $v est réaffecté dans la boucle suivante, cela modifie par inadvertance l'élément du tableau correspondant à la référence.
Solution
Pour éviter ce problème, désactivez explicitement le référence au dernier élément avant la deuxième boucle foreach :
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Comprendre le pas à pas Processus
Voici une explication étape par étape de ce qui se passe dans le code :
Première boucle foreach :
Deuxième boucle foreach :
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!