Вопрос по arrays, php – Хранение объектов в массиве с помощью php

7

У меня есть функция, которая извлекает строки из базы данных, их тип содержимого -> id и тип содержимого - они используются для динамического вызова метода в уже загруженной модели для получения и форматирования деталей объекта. Как только объект возвращается, он добавляется в массив. Все хорошо, за исключением того, что когда я пришел к использованию массива, хотя он содержит правильное количество элементов, они все содержат один и тот же объект, хотя я знаю, что они возвращаются по-разному. Я в полной растерянности с этим, любая помощь / идеи будут великолепны!

Код ниже:

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
        )

)
Это настоящая копия вашего кода? cgp

Ваш Ответ

3   ответа
4

он не выдвигает значение, на которое указывает $ 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);
Error: User Rate Limit Exceeded Paul Dixon
Error: User Rate Limit Exceeded
13

что проблема в том, что вы каждый раз получаете один и тот же объектby reference отget функция, а затем добавить егоby reference в массив, в результате чего все элементы в массиве изменяются, когда элемент изменяется вget функция. Если это так, должно работать следующее:

foreach($query->result() as $content)
{
    $item = $this->{'mod_'.$content->type}->get($content->id);
    print_r($item);
    $items[] = clone $item;
}
print_r($items);
Error: User Rate Limit Exceeded Paul Dixon
3

вероятно, возвращаете ссылки на элемент, а не сами элементы. Это всегда будет последняя ссылка, на которую указывает $ item.

Похожие вопросы