2009-10-02 2 views
0

를 참조합니다. 그 위에 반복 할 때, 모든 요소는 같을 것입니다 (첫 번째).예기치 않은 동작이 나는 배열을 변경하는 참조를 사용하고

내부 배열에 참조 연산자 &을 제거하면 색인이 설정되지 않는다는 점을 제외하면 모두 정상적으로 처리됩니다.

+0

참조 변수 중 하나를 다른 곳에서 다시 사용하고있는 것 같습니다. 아직 참조를 잊어 버린 것 같습니다. 나머지 코드를 보면 도움이 될 수도 있습니다. – Greg

답변

4

이렇게하면 루프를 종료 할 때 $ newAppointment를 설정 해제해야합니다. 여기에 relevant entry입니다.

+0

다른 해결책을 찾으셨습니까? http://nl2.php.net/manual/en/language.references.whatdo.php#73631하지만 답은 더 좋습니다. – Ikke

5

foreach 루프에서 참조를 사용하면 문제가 생길 수 있습니다. :) 여러 번했는데 항상 코드를 다시 작성했습니다.

당신도해야합니다. 이와 같이 :

"기계적으로"다시 작성 했으므로 작동하지 않을 수도 있습니다. 그러나 부작용없이 동일한 효과를 얻는 방법에 대한 아이디어를 얻는 것입니다. 이 루프에서 여전히 원래 배열을 수정하고 있습니다.

+0

나는 여기서 참조가 잘 맞을 것이라고 생각한다. 그게 어디서 참조를 위해 맞지? – Ikke

+0

음, 정확히는 아닙니다. 이미 요소 (키)에 대한 "핸들"을 무료로 가지고 있기 때문에 실제로 사용할 수있는 실질적인 이점은 없습니다. 참조는 여기에서 발생하지 않는 데이터의 중복을 피하는 것입니다. 사실 foreach 루프 내의 참조는 본질적으로 매우 혼란스럽고 미묘한 버그를 유발할 수 있습니다. 예를 들어, 코드에서 $ newAppointment와 $ appointment는 2 루프 후에도 배열의 마지막 항목을 가리키며 설정 상태를 유지합니다. 나중에 이러한 이름을 다시 사용하기 쉽고 잘못된 요소가 "예기치 않게"변경되는 이유를 이해하기 어려울 수 있습니다. – Palantir

관련 문제