J'écris du PHP depuis de nombreuses années, mais je fais encore des erreurs stupides. Aujourd'hui, j'ai rencontré un piège lors du référencement des variables dans foreach. La version PHP est la 5.6.12. Le code est le suivant :
<?php $arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
Résultats de sortie
Quand j'ai vu pour la première fois le résultat de sortie du deuxième foreach, je me suis senti très dérouté. Comment deux d_d pouvaient-ils être générés ?
Après y avoir bien réfléchi, il s'avère que, comme la portée de $a en PHP foreach est une variable locale de la fonction entière, elle est toujours valide en dehors de la boucle, plutôt que d'être enfermée dans la boucle,
Ainsi, lorsque le deuxième foreach est exécuté, $a n'est pas une nouvelle variable, mais pointe toujours vers la référence d'adresse du cinquième élément du tableau $arr
Lorsque le deuxième foreach est. en boucle, c'est en fait dans Continuer à attribuer des valeurs au 5ème élément du tableau $arr,
La situation d'affectation spécifique,
La première fois : a_a est affecté au 5ème élément, le résultat est : [a_a, b_b, c_c, d_d,a_a]
La deuxième fois : b_b est affecté au cinquième élément, le résultat est : [a_a, b_b, c_c, d_d,b_b]
La troisième fois : c_c est attribué au 5ème élément, le résultat est : [a_a, b_b, c_c, d_d,c_c]
La quatrième fois : d_d est attribué au 5ème élément, le résultat est : [a_a, b_b, c_c, d_d, d_d]
La cinquième fois : À ce moment, parce que le cinquième élément est devenu d_d, d_d est à nouveau affecté au cinquième élément, et le résultat est still : [a_a, b_b, c_c, d_d,d_d]
Solution :
1. Essayez de ne pas utiliser le même nom de variable de boucle
2. $a); après chaque utilisation ou avant de l'utiliser à nouveau. Déverrouillez l'application d'adresse
ou utilisez l'exemple de code ci-dessus :
$arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; echo $a; echo '<hr>'; // 这里 unset 掉 unset($a); echo $a = 'ccc'; echo '<hr>'; print_r($arr); echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
Résultat de sortie :
Maintenant, c'est normal, ces petits détails, assurez-vous de faire attentionCe qui précède est une brève discussion de l'éditeur sur les pièges de l'utilisation de variables de référence dans foreach en PHP. J'espère que vous soutiendrez le. Site Web PHP chinois ~Plus Une brève discussion sur les pièges de l'utilisation de variables de référence dans foreach en PHP Pour les articles connexes, veuillez faire attention au site Web PHP chinois !