У меня есть массив объектов. Объекты в основном имеют кучу свойств, потому что это объекты метаданных.
поэтому он похож на $objects[]
, как на кучу элементов, которые имеют такие свойства, как: object->item1
, object->item2
и т. д.
Я хочу добавить что-то к каждому из этих объектов, поэтому …
foreach ($objects as &$object) { $object->newItem=(something I compute); }
то позже я хочу отобразить эти объекты в виде списка в html. Итак, я иду:
foreach ($objects as $object) { <li><?php object output stuff here ?></li> }
ОК. Теперь он отлично работает, за исключением того, что последний объект отбрасывается, а второй – последний объект отображается дважды. WTF ??
Это имеет смысл для вас?
Если вы повторяете по ссылке, всегда отключайте итерационную переменную:
foreach ($objects as &$object) { // some code } unset($object);
Выдержка из документации foreach
:
Ссылка на значение $ и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его unset ().
Если вы хотите понять, почему ваш код ведет себя так, как он себя ведет, читайте здесь следующее: Ссылки и foreach
Объекты всегда являются ссылками, поэтому просто удалите '&'
foreach ($objects as $object) { $object->newItem=(something I compute); } foreach ($objects as $object) { echo "<li>{$object->someResult()}</li>"; }
Я знаю, что вы уже получили свой ответ, но это может помочь другим разработчикам быстрее найти его.