>  기사  >  백엔드 개발  >  루핑 시 참조 전달에 대한 질문

루핑 시 참조 전달에 대한 질문

WBOY
WBOY원래의
2016-12-01 00:56:201011검색

루핑 시 참조 전달에 대한 질문

처음으로 값이 참조로 전달되면 배열 요소의 값이 변경됩니다. 두 번째로 $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);를 추가하세요.

원칙을 축약하면, 스스로 구글/바이두를 할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.