PHP Foreach Pass by Reference Enigma: 신비한 마지막 요소 중복
PHP에서 foreach 루프를 pass-by- 참조 할당(예: foreach($arr as &$item)), 예기치 않은 동작이 발생할 수 있습니다. 다음과 같은 난해한 예를 고려해 보세요.
1 2 3 4 5 6 7 |
|
이 코드는 다음을 출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
중복 설명
첫 번째 foreach 루프 이후에 각 요소는 $arr는 여전히 $item에서 참조됩니다. 두 번째 루프가 반복되면 각 요소의 값이 배열의 마지막 요소인 $item의 값으로 대체됩니다. 이는 $arr의 각 요소가 $arr[2]의 값으로 설정되어 출력의 마지막 요소가 중복된다는 의미입니다.
출력 디버깅
이 동작을 설명하기 위해 각 foreach 반복에 print 문을 추가하여 출력을 디버깅해 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 |
|
이 결과는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
$arr는 두 번째 foreach 루프 중에 배열의 마지막 요소로 변경되는 $item 값으로 설정됩니다.
버그 또는 의도된 동작?
이것은 행동은 버그가 아닙니다. 참조로 전달한 결과입니다. foreach 루프는 단순히 현재 요소의 값을 루프 헤더에 지정된 변수에 할당합니다. 이 경우 $item을 참조하여 두 번째 루프에서 원래 배열 요소를 수정합니다. 이는 다음 코드와 동일합니다.
1 2 3 |
|
따라서 관찰된 동작은 버그가 아니라 PHP에서 의도한 참조별 전달 의미의 결과입니다. 이러한 동작을 방지하려면 단순히 각 요소의 값을 $item에 할당하여 두 번째 foreach 루프에서 값별 전달을 사용하세요. foreach($arr는 $item으로).
위 내용은 참조별 전달을 사용하는 PHP의 Foreach 루프에서 마지막 요소가 중복되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!