Heim > Artikel > Backend-Entwicklung > Fragen zur Referenzübergabe beim Schleifen
Wenn der Wert zum ersten Mal als Referenz übergeben wird, wird der Wert des Array-Elements immer noch geändert Wert eines Elements? Und die ersten paar Elemente haben sich nicht geändert, aber das letzte hat sich geändert?
<code><?php $arr = array(1,2,3,4,5); foreach ($arr as $k => &$v) { switch ($v) { case '1': $v = 'a'; break; case '2': $v = 'b'; break; case '3': $v = 'c'; break; case '4': $v = 'd'; break; case '5': $v = 'e'; break; default: # code... break; } } var_dump($v); var_dump($arr); foreach ($arr as $k => $v) { var_dump($v); } var_dump($arr);</code>
Wenn der Wert zum ersten Mal als Referenz übergeben wird, wird der Wert des Array-Elements immer noch geändert Wert eines Elements? Und die ersten paar Elemente haben sich nicht geändert, aber das letzte hat sich geändert?
<code><?php $arr = array(1,2,3,4,5); foreach ($arr as $k => &$v) { switch ($v) { case '1': $v = 'a'; break; case '2': $v = 'b'; break; case '3': $v = 'c'; break; case '4': $v = 'd'; break; case '5': $v = 'e'; break; default: # code... break; } } var_dump($v); var_dump($arr); foreach ($arr as $k => $v) { var_dump($v); } var_dump($arr);</code>
<code>$arr = array(1,2,3,4,5); foreach ($arr as $k => &$v) { switch ($v) { case '1': $v = 'a'; break; case '2': $v = 'b'; break; case '3': $v = 'c'; break; case '4': $v = 'd'; break; case '5': $v = 'e'; break; default: # code... break; } } var_dump($v); var_dump($arr); unset($v);//foreach 使用引用时在处理完后立即断开引用关系,或则把下面的$v=>$va foreach ($arr as $k => $v) { var_dump($v); } var_dump($arr); </code>
Nach der ersten Schleife $v = e;//Hier gibt es immer noch eine Referenzbeziehung&$arr['e'];
Der vorletzte Schritt der zweiten Schleife ist &$v = $arr['d']; dann &$arr['e'] = &$v = $arr['d'];
Dies ist eine klassische Falle von PHP-Referenzen.
Lösung: Fügen Sie einfach unset($v);
nach dem ersten foreach hinzu.
Das Prinzip ist abgekürzt, Sie können selbst googeln/baidu.