>백엔드 개발 >PHP 튜토리얼 >PHP Foreach 루프에서 참조를 사용하면 요소 값이 반복되는 이유는 무엇입니까?

PHP Foreach 루프에서 참조를 사용하면 요소 값이 반복되는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-15 07:29:13538검색

Why Does Using a Reference in a PHP Foreach Loop Lead to Repeated Element Values?

Foreach 내부에서 참조를 사용할 때 요소 값이 배열에서 반복되는 이유는 무엇입니까?

다음 PHP 코드를 고려하세요.

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

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

print_r($a);

놀랍게도 출력에서는 마지막 요소의 값이 다른 요소의 값을 덮어썼다는 것을 보여줍니다. in:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)

이상한 점 설명

이 동작은 첫 번째 foreach 루프에서 참조(&) 사용에서 비롯된 PHP의 문서화된 측면입니다. .

첫 번째 루프 동안 배열의 각 요소는 참조로 $v에 할당됩니다. $v가 수정되면 원래 배열에서 참조된 요소가 변경됩니다. 따라서 $v가 후속 루프에서 재할당되면 참조에 해당하는 배열 요소가 실수로 변경됩니다.

해결책

이 문제를 방지하려면 명시적으로 설정을 해제하세요. 두 번째 foreach 루프 앞의 마지막 요소에 대한 참조:

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

print_r($a);

이해 단계별 프로세스

코드에서 발생하는 일에 대한 단계별 설명은 다음과 같습니다.

  • 첫 번째 foreach 루프:

    • 반복 1: $v는 $a[0]에 대한 참조입니다. ('a')
    • 반복 2: $v는 $a[1]에 대한 참조입니다. ('b')
    • 반복 3: $v는 $a[2]에 대한 참조입니다. ('c')
    • 반복 4: $v는 $a[3]에 대한 참조입니다. ('d')
  • 첫 번째 루프가 끝날 때 $v는 여전히 $a[3] ('d')를 참조합니다.
  • 두 번째 foreach 루프:

    • 반복 1: $v는 $a[3]에 대한 참조로 유지되지만 해당 값은 다음과 같습니다. $a[0] ('a')로 설정합니다. 그러면 $a[3]가 'a'로 변경됩니다.
    • 반복 2-4: 후속 반복에서는 이 프로세스를 반복하여 $a[3]를 $a[1]('b') 값으로 덮어씁니다. $a[2] ('c'), 그리고 마지막으로 $a[3] ('c')입니다.

위 내용은 PHP Foreach 루프에서 참조를 사용하면 요소 값이 반복되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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