Maison  >  Article  >  développement back-end  >  Problème avec la boucle foreach utilisant & (et l'opérateur)

Problème avec la boucle foreach utilisant & (et l'opérateur)

伊谢尔伦
伊谢尔伦original
2017-06-23 15:05:551875parcourir

foreach Il est facile de modifier l'unité du tableau en ajoutant & avant $value Soyez prudent lorsque vous utilisez pour référencer dans foreach. Vous pouvez également déconnecter la relation de référence immédiatement après le traitement, afin que la situation ci-dessus ne se produise pas plus tard.

foreach($arr as $value){ 
$value .= '4'; 
}

Mais cette utilisation est également facile à provoquer des erreurs, et elle n'est pas facile à trouver.
Il est plus simple de regarder l'exemple :

<?php 
$arr = array(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;); 
$arr2 = array(&#39;d&#39;, &#39;e&#39;, &#39;f&#39;); 

foreach($arr as $value){//习惯用$value或$val 
$value .= &#39;4&#39;; 
} 

//都处理完毕我们在页面模版输出,首先输出$arr2 
foreach($arr2 as $value){//习惯用$value或$val 
//echo $value; 
} 
//然后再这样输出 $arr; 
foreach($arr as $value){//习惯用$value或$val 
echo $value, "\n"; 
} 
?>

Voyons si le résultat de sortie est le même que prévu. Le résultat ici est :

a4
b4
b4

Le résultat est différent de ce à quoi je m'attendais. Il s'agit d'un problème causé par la citation.
Lorsque foreach($arr as &$value) parcourt le tableau jusqu'à la fin, la relation de référence n'est pas rompue. Cela équivaut à la référence de la dernière unité de $value et $arr, qui est $arr[2. ].
En passant à foreach($arr2 as $value), la valeur de $value change toujours avec la valeur de l'unité du tableau puisque la relation de référence n'est pas rompue, la valeur de $arr[2] change également en conséquence. Jusqu'à ce que $arr2 soit traversé, la valeur de $value est f, donc la valeur de $arr[2] est également f.
À ce stade, la valeur de $arr devrait être :

Array 
( 
[0] => a4 
[1] => b4 
[2] => f 
)

Ceci est différent du résultat final que nous voyons. Ensuite, allez à foreach($arr as $value). De la même manière, la valeur de $arr[2] change également avec $value lorsque la clé est 1, c'est-à-dire $arr[1], $arr[2. ] La valeur devient également la valeur de $arr[1], qui est b4. Ensuite, lors de l'itération vers la clé 2, la valeur de $arr[2] redevient la valeur de $arr[2], qui est b4. C'est le résultat de la production.
Soyez donc prudent lorsque vous utilisez des références dans foreach. Vous pouvez également déconnecter la relation de référence immédiatement après le traitement, afin que la situation ci-dessus ne se produise pas plus tard.

foreach($arr as $value){ 
$value .= &#39;4&#39;; 
} 
unset($value);


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:
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