Можно создать дубликат:
Strange behavior Of foreachСтранное поведение PHP - Что происходит?
Просто наткнулся на эту ошибку в последнее время в PHP приложение. Не уверен, что происходит.
В основном, он появляется при использовании комбинации двух foreach
(один с &, один без).
Вот тестовый код, который воспроизводит проблему:
$items = array(
array('id'=>1, 'name'=>'foo', 'value'=>150),
array('id'=>2, 'name'=>'bar', 'value'=>190)
);
foreach($items as &$item)
{
$item['percentage'] = $item['value'] * 0.75;
}
var_dump($items); // All Good
foreach($items as $item)
{
var_dump($item); // Shows 1st item twice
}
Второй foreach
цикл работает блок дважды, как и ожидалось, но $item
застревает на первом элементе.
Я понимаю, что это, вероятно, причиной с использованием ссылки &
в первом цикле, но я не понимаю, почему он должен вести себя, как это ..
Любая идея? это ошибка?
Получение того же результата на 5.3.8, 5.3.10 & 5,4
Это хорошо известный побочный эффект при повторном использовании ссылки. Я уверен, что во всем мире есть повторяющиеся вопросы. 'unset ($ item)' после первого цикла. – deceze
Ну, я рад, что люди скорее называют это известным побочным эффектом, а не ошибкой :) – Ben
@FelixKling Спасибо за реф. Голосование, чтобы закрыть мой собственный вопрос (не думаю, что я когда-либо делал это раньше) – Ben