> 백엔드 개발 > PHP 튜토리얼 > PHP의 'foreach' 루프에서 참조를 사용하면 예기치 않은 배열 수정이 발생하는 이유는 무엇입니까?

PHP의 'foreach' 루프에서 참조를 사용하면 예기치 않은 배열 수정이 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-16 09:24:17
원래의
386명이 탐색했습니다.

Why Does Using References in PHP's `foreach` Loop Lead to Unexpected Array Modifications?

'foreach' 루프의 참조 동작: 배열 수정 이해

PHP에서 'foreach' 루프 내에서 참조를 사용하면 예상치 못한 결과가 발생할 수 있습니다. 배열 수정. 이 동작은 다음 코드에서 강조됩니다.

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
foreach ($a as $v) { }

print_r($a);
로그인 후 복사

이 코드가 생성하는 출력은 예상치 못한 결과입니다.

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)
로그인 후 복사

단계별 설명

이 동작을 이해하려면 'foreach'의 각 반복 중에 발생하는 변경 사항을 추적하는 것이 중요합니다. 루프:

  • 첫 번째 반복(참조 반복): $v는 $a[0]('a')에 대한 참조입니다.
  • 2차 반복(참조 반복): $v는 $a[1]에 대한 참조입니다. ('b').
  • 3차 반복(참조 반복): $v는 $a[2] ('c')에 대한 참조입니다.
  • 4차 반복(참조 반복): $v는 $a[3]에 대한 참조입니다. ('d').

첫 번째 'foreach' 루프(참조 반복)가 완료되면 $v는 여전히 $a[3] ('d')에 대한 참조를 보유합니다.

  • 첫 번째 반복(값 반복): $v(계속 $a[3] 참조)에 다음 값이 할당됩니다. $a[0] ('a'). 그러나 $v는 참조이므로 $a[3]를 'a'로 수정합니다.
  • 2차 반복(값 반복): $v(여전히 $a[3]를 참조함) )에는 $a[1] ('b') 값이 할당됩니다. 이는 다시 $a[3]를 'b'로 수정합니다.
  • 3차 반복(값 반복): $v(계속 $a[3] 참조)에 $a 값이 할당됩니다. [2] ('c'). 이는 $a[3]을 다시 'c'로 수정합니다.
  • 4번째 반복(값 반복): $v(계속 $a[3] 참조)에 $ 값이 할당됩니다. a[3] ('c').

따라서 두 번째 'foreach' 루프(값 반복) 후에 배열 $a 'c'가 두 번 나타나는 것으로 수정되었습니다.

문제 해결

이 예상치 못한 동작을 방지하려면 각 반복 후에 참조 설정을 해제하는 것이 좋습니다.

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);
로그인 후 복사

이렇게 하면 예상되는 결과가 나옵니다.

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)
로그인 후 복사

위 내용은 PHP의 'foreach' 루프에서 참조를 사용하면 예기치 않은 배열 수정이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿