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

WBOY
풀어 주다: 2023-03-01 20:46:01
원래의
1014명이 탐색했습니다.

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

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

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

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!