有一天,我遇到了这个问题,我无法找到解决方案。 我的目标是从ID(父亲)返回一个链接列表。所以我想要他所有的孩子。 但在视图中,我只有结果(第一个......)。
我在我的控制器中:
$data['list_link'] = $this->menuManager->list_link();
在我的模型中:
function list_link($fatherid=0){
$r = array();
$sSQL = 'SELECT * FROM categories WHERE fatherid = ' . $fatherid . ' AND siteid = ' . MY_SITEID_DEFAULT . ' ORDER BY name';
$query = $this->db->query($sSQL);
// stock results in array
$r[] = $query->result_array();
foreach ($query->result() as $row) {
// let's find the childs
$this->list_link($row->id,$loop);
}
return $r;
}
如果我"对于每个"这里的$ r,看起来都不错。 所以,$ data [' list_link'] shoud现在拥有所有行。
在我看来:
foreach ($list_link as $link){
foreach ($link as $row){
echo $row['name'];
}
}
但是,我只有第一个链接(第一个孩子),而不是另一个。我会非常感激任何帮助,因为我已经解决了这个问题......
答案 0 :(得分:1)
您不会在递归通话中存储任何值(尽管我仍然不确定您是否得到了您的期望)。您需要在每个函数调用中填充$r
:
$r[] = $this->list_link($row->id,$loop);
然而,要么我错过了某些东西,要么你过度复杂,但我认为你可以简单地返回结果数组并使用它:
function list_link($fatherid=0,$loop=0){
$sSQL = 'SELECT * FROM categories WHERE fatherid = ' . $fatherid . ' AND siteid = ' . MY_SITEID_DEFAULT . ' ORDER BY name';
$query = $this->db->query($sSQL);
return $query->result_array();
}
更新
你的最新版本仍然没有从递归调用中收集数据,这里是完整函数,看看它是否有效:
function list_link($fatherid=0){
$r = array();
$sSQL = 'SELECT * FROM categories WHERE fatherid = ' . $fatherid . ' AND siteid = ' . MY_SITEID_DEFAULT . ' ORDER BY name';
$query = $this->db->query($sSQL);
$result = $query->result_array();
// stock results in array
$r[$fatherid] = $result;
foreach ($result as $row) {
// let's find the children
$r[$fatherid][$row['id']] = $this->list_link($row['id']);
}
return $r;
}
请注意,我已添加$r[$fatherid][$row['id']]
,因此最终结果应为具有分支结构的数组。如果您不想要,请改为$r[]
。