Подтвердить что ты не робот

Почему php-итерация по ссылке возвращает дубликат последней записи?

Я только что потратил 2 часа на охоту на ошибку, которая, по-видимому, исходит из итерации foreach с помощью & value. У меня есть многомерное множество, и когда a запустил это:

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

и PHP возвратил массив с тем же самым количеством элементов, НО с последней записью DUPLICATE. Есть ли что-то, что я не понимаю об этой структуре?

Я запустил код на другой машине, и результат был таким же.

4b9b3361

Ответ 1

Я предполагаю, что вы повторно используете &$item здесь и что вы спотыкаетесь о поведении, которое было объявлено как ошибка тысячу раз, но это правильное поведение ссылок, которое почему руководство советует:

Ссылка на значение $и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его unset().

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

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