처음으로 값이 참조로 전달되면 배열 요소의 값이 변경됩니다. 두 번째로 $k, $v가 참조를 사용하지 않고 변경되는 이유는 무엇입니까? 요소의 가치? 그리고 처음 몇 가지 요소는 변경되지 않았지만 마지막 요소는 변경되었습니까?
<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>
처음으로 값이 참조로 전달되면 배열 요소의 값이 변경됩니다. 두 번째로 $k, $v가 참조를 사용하지 않고 변경되는 이유는 무엇입니까? 요소의 가치? 그리고 처음 몇 가지 요소는 변경되지 않았지만 마지막 요소는 변경되었습니까?
<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>
첫 번째 루프 이후 $v = e;//여기에는 여전히 참조 관계가 있습니다&$arr['e'];
두 번째 루프의 두 번째 단계는 &$v = $arr['d'] 다음 &$arr['e'] = &$v = $arr['d'];
입니다.
이것은 PHP 참조의 전형적인 함정입니다.
해결책: 첫 번째 foreach 뒤에 unset($v);
를 추가하세요.
원칙을 축약하면, 스스로 구글/바이두를 할 수 있습니다.