2011-08-23 48 views
12

Tôi chỉ mất 2 giờ để săn một lỗi mà dường như xuất phát từ một lần lặp lại với giá trị &. Tôi có một mảng multidimentional và khi một ran này:Tại sao lặp lại php bằng tham chiếu trả về một bản ghi cuối cùng trùng lặp?

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

và PHP trả lại một mảng với số lượng thành phần tương tự, nhưng với một bản sao hồ sơ cuối cùng. Có cái gì tôi không hiểu về cấu trúc này?

Tôi đã chạy mã trên một máy khác và kết quả giống nhau.

+4

cho chúng ta thấy mã của bạn –

+0

này không nên xảy ra, bạn có thể cung cấp một số ví dụ? – XzKto

+0

+1 để can đảm đăng câu hỏi SO chỉ là lỗi người dùng, nhưng không phải. Dễ dàng chỉ mất 2 giờ gỡ lỗi và thêm đăng nhập và đơn giản hóa mã cho đến khi tôi không có sự lựa chọn nào khác ngoài google php foreach trùng lặp và đã đến đây. Cảm ơn nhiều @vasion. –

Trả lời

27

tôi sẽ đoán rằng bạn đang tái sử dụng&$item đây và rằng bạn đang ngại qua một hành vi đã được báo cáo là lỗi một ngàn lần nhưng là hành vi đúng đắn về tài liệu tham khảo, đó là lý do tại sao manual advises:

Tham chiếu giá trị $ và phần tử mảng cuối cùng vẫn còn sau vòng lặp foreach. Bạn nên hủy nó bằng cách unset().

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

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

Các vấn đề liên quan