У меня есть функция, которая вытягивает строки из базы данных, типы content-> id и content-> – они используются для динамического вызова amethod в уже загруженной модели, чтобы получить и форматировать детали объектов. Как только объект возвращается, он добавляется в массив. Все хорошо, за исключением того, что когда я прихожу к использованию массива, хотя в нем есть правильное количество элементов, все они содержат один и тот же объект, хотя я знаю, что они возвращаются разными. Im с полной потерей с этим, любая помощь / идеи, которые будут здорово!
Код ниже:
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 ) )
Я бы предположил, что проблема в том, что вы каждый раз попадаете на один и тот же объект по ссылке из функции get
а затем добавляете его по ссылке на массив, в результате чего все элементы в массиве изменяются, когда элемент изменяется в функции get
, Если это так, то должно работать следующее:
foreach($query->result() as $content) { $item = $this->{'mod_'.$content->type}->get($content->id); print_r($item); $items[] = clone $item; } print_r($items);
Когда вы нажимаете $ item на $ items, он не нажимает значения $ item points, а скорее сама ссылка. Каждый раз вам нужно инициализировать $ 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.