Heim  >  Artikel  >  Backend-Entwicklung  >  Problem bei der Verwendung von & (und Operator) in der foreach-Schleife

Problem bei der Verwendung von & (und Operator) in der foreach-Schleife

伊谢尔伦
伊谢尔伦Original
2017-06-23 15:05:551833Durchsuche

foreach Es ist einfach, die Einheit von array zu ändern, indem Sie & vor $value hinzufügen. Seien Sie vorsichtig, wenn Sie verwenden, um in foreach zu referenzieren. Sie können die Referenzbeziehung auch sofort nach der Verarbeitung trennen, damit die obige Situation später nicht mehr auftritt.

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

Aber diese Verwendung kann auch leicht zu Fehlern führen und ist nicht leicht zu finden.
Es ist einfacher, sich das Beispiel anzusehen:

<?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"; 
} 
?>

Sehen wir uns an, ob das Ausgabeergebnis das gleiche ist wie erwartet. Das Ergebnis hier ist:

a4
b4
b4

Das Ergebnis unterscheidet sich von dem, was ich erwartet habe. Dies ist ein durch Zitieren verursachtes Problem.
Wenn foreach($arr as &$value) das Array bis zum Ende durchläuft, wird die Referenzbeziehung nicht unterbrochen. Dies entspricht der Referenz der letzten Einheit von $value und $arr, nämlich $arr[2 ].
Wenn Sie zu foreach($arr2 as $value) wechseln, ändert sich der Wert von $value immer mit dem Wert der Array-Einheit. Da die Referenzbeziehung nicht unterbrochen wird, ändert sich auch der Wert von $arr[2] entsprechend. Bis $arr2 durchlaufen wird, ist der Wert von $value f, also ist auch der Wert von $arr[2] f.
Zu diesem Zeitpunkt sollte der Wert von $arr sein:

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

Dies unterscheidet sich vom endgültigen Ausgabeergebnis, das wir sehen. Gehen Sie dann zu foreach($arr als $value). Auf die gleiche Weise ändert sich auch der Wert von $arr[2], wenn der Schlüssel 1 ist, also $arr[1], $arr[2 ] Der Wert wird auch zum Wert von $arr[1], also b4. Wenn dann zu Schlüssel 2 iteriert wird, wird der Wert von $arr[2] wieder zum Wert von $arr[2], also b4. Es ist das Ergebnis der Ausgabe.
Seien Sie also vorsichtig, wenn Sie Referenzen in foreach verwenden. Sie können die Referenzbeziehung auch sofort nach der Verarbeitung trennen, damit die obige Situation später nicht mehr auftritt.

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


Das obige ist der detaillierte Inhalt vonProblem bei der Verwendung von & (und Operator) in der foreach-Schleife. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn