Почему php-итерация по ссылке возвращает дубликат последней записи?
Я только что потратил 2 часа на охоту на ошибку, которая, по-видимому, исходит из итерации foreach с помощью & value. У меня есть многомерное множество, и когда a запустил это:
foreach($arrayOfJsonMods as &$item){
//TODO memcached votes
}
и PHP возвратил массив с тем же самым количеством элементов, НО с последней записью DUPLICATE. Есть ли что-то, что я не понимаю об этой структуре?
Я запустил код на другой машине, и результат был таким же.
Ответы
Ответ 1
Я предполагаю, что вы повторно используете &$item
здесь и что вы спотыкаетесь о поведении, которое было объявлено как ошибка тысячу раз, но это правильное поведение ссылок, которое почему руководство советует:
Ссылка на значение $и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его unset().
foreach($arrayOfJsonMods as &$item)
{
//TODO memcached votes
}
unset($item);
См. https://bugs.php.net/bug.php?id=29992