Хранение объектов в массиве с помощью 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.