2011-08-23 28 views
12

Właśnie spędziłem 2 godziny polując na błąd, który najwyraźniej pochodzi z iteracji foreach z wartością &. Mam wielowymiarowych tablicy i kiedy ran to:Dlaczego iteracja php przez odniesienie zwraca duplikat ostatniego rekordu?

foreach($arrayOfJsonMods as &$item){ 
     //TODO memcached votes 
    } 

i PHP powrócił tablicę z tej samej liczby elementów, ale z duplikatu ostatniego rekordu. Czy jest coś, czego nie rozumiem w tej strukturze?

Uruchomiłem kod na innym komputerze, a wynik był taki sam.

+4

pokazać nam swój kod –

+0

To nie powinno się zdarzyć, możesz podać jakiś przykład? – XzKto

+0

+1 za odwagę wysłania pytania SO, które musi być błędem użytkownika, ale nim nie jest. Z łatwością spędziliśmy 2 godziny na debugowaniu i dodawaniu logów i upraszczaniu kodu, dopóki nie miałem innego wyjścia, jak tylko google php foreach powielić i dostałem tutaj. Wielkie dzięki @vasion. –

Odpowiedz

27

Ja przypuszczam, że jesteś ponowne&$item tutaj i że jesteś natyka się zachowań, które zostały zgłoszone jako błąd tysiąc razy, ale jest prawidłowe zachowanie referencji, czyli dlaczego manual advises:

Odniesienie do wartości $ i ostatniego elementu tablicy pozostaje nawet po pętli foreach. Zalecane jest zniszczenie go przez unset().

foreach($arrayOfJsonMods as &$item) 
{ 
    //TODO memcached votes 
} 
unset($item); 

Zobacz https://bugs.php.net/bug.php?id=29992

Powiązane problemy