Codeigniter多维数组仅返回第一行

时间:2014-10-19 15:51:03

标签: php arrays codeigniter recursion

有一天,我遇到了这个问题,我无法找到解决方案。 我的目标是从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'];
   }
}

但是,我只有第一个链接(第一个孩子),而不是另一个。我会非常感激任何帮助,因为我已经解决了这个问题......

1 个答案:

答案 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[]