我有一个从数据库中提取行的函数,content-> id和content->类型用于动态调用已加载模型中的amethod来获取和格式化对象详细信息。返回对象后,它将添加到数组中。一切都很好,除了当我来使用数组虽然它有正确数量的项目,它们都包含相同的对象,即使我知道它们返回不同。我完全失去了这个,任何帮助/想法都会很棒!
代码如下:
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
)
)
答案 0 :(得分:13)
我猜这个问题是你每次通过引用从get
函数到达同一个对象,然后通过引用将它添加到数组,导致在get
函数中修改项目时修改数组中的所有项目。如果是这种情况,以下情况应该有效:
foreach($query->result() as $content)
{
$item = $this->{'mod_'.$content->type}->get($content->id);
print_r($item);
$items[] = clone $item;
}
print_r($items);
答案 1 :(得分:4)
当你将$ 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);
答案 2 :(得分:3)
您可能正在返回对项目的引用,而不是项目本身。它始终是$ item指向的最后一个引用。