Хранение объектов в массиве с помощью php
у меня есть функция, которая извлекает строки из базы данных, content - >id и content->type используются для динамического вызова amethod в уже загруженной модели для получения и форматирования деталей объектов. Как только объект возвращается, он добавляется в array. Все хорошо, за исключением того, что когда я использую массив, хотя в нем есть правильное количество элементов, все они содержат один и тот же объект, хотя я знаю, что они возвращаются разными. Я в полной растерянности с этим, любая помощь/идеи whould быть здорово!
код ниже:
foreach($query->result() as $content)
{
$item = $this->{'mod_'.$content->type}->get($content->id);
print_r($item);
$items[] = $item;
}
print_r($items);
и операторы print_r производят следующее:
stdClass Object
(
[id] => 30
[type] => page
)
stdClass Object
(
[id] => 29
[type] => page
)
Array
(
[0] => stdClass Object
(
[id] => 29
[type] => page
)
[1] => stdClass Object
(
[id] => 29
[type] => page
)
)
3 ответов
когда вы нажимаете $item на $items, он не нажимает на значение $item, а скорее на саму ссылку. Вам нужно будет инициализировать $ item каждый раз:
foreach($query->result() as $content)
{
$item = new stdClass();
$item = $this->{'mod_'.$content->type}->get($content->id);
print_r($item);
$items[] = $item;
}
print_r($items);
вы, вероятно, возвращаете ссылки на элемент, а не сами элементы. Это всегда будет последняя ссылка, на которую указывает $item.