2013-08-05 1 views
1

의 순서가 내 코드 휴식. 이 두 for 루프에 할당 된 변수는 동일합니다. 이상한 일은 두 번째 for 루프를 반복 할 때입니다. 첫 번째 n-1 요소는 정확하지만 마지막 요소 대신 마지막 요소가 하나 나타납니다. 나는 모든 것을 하나의 루프로 할 수있다. 변수 $ ad의 이름을 바꿀 수 있지만 제대로 작동하지만 무슨 일이 있었는지 알고 싶습니다.두 foreach는 루프는 다음 요소

답변

3

첫 번째 루프가 참조로 반복되므로 두 번째 시도가 $ad에 "현재 항목"을 할당하려고 시도하면 실제로 $ad 업데이트 외에도 배열 내용이 업데이트됩니다.

foreach 바로 뒤에 unset ($ad)을 추가하여 PHP가 그 시점부터 $ad이라는 이름을 고려하지 않도록하는 것이 가장 간단합니다.

이 작업을 수행 할 필요가 있거나 나중에 참조에 숨겨진 업데이트로 인해 어려움을 겪을 필요가있는 것은 PHP에서 사용자를 물릴 수있는 가장 못된 것 중 하나입니다. 개인적으로 나는 함수에있는 마지막 문장 인 경우에도 참조로 반복 한 후 unset을 추가하는 것에 매우 종교적입니다.

+0

'array_map'은 사용 후에'unset'을 요구하지 않는 대안입니다. – Yoshi

+0

@ Yoshi : 예. 'key [[key] [ 'img'] = ...'를 추가 할 수도 있습니다. – Jon