Php 向数组递归地添加值

Php 向数组递归地添加值,php,recursion,codeigniter-3,Php,Recursion,Codeigniter 3,我想获取数组的子元素ID。 从我的表中,ID5是ID4的父级,ID4是ID9的父级。 如果我调用id为5的childCategoryIds()函数,它应该返回[11,9,4],但是 它正在返回[11,4]。我的函数和sql数据如下所示: 表: id parent_id name 4 5 Cat Four 5 1 Cat Five 9 4 Cat Nine 11 5

我想获取数组的子元素ID。 从我的表中,ID5是ID4的父级,ID4是ID9的父级。 如果我调用id为5的childCategoryIds()函数,它应该返回[11,9,4],但是 它正在返回[11,4]。我的函数和sql数据如下所示:

表:

id  parent_id   name        
4   5           Cat Four    
5   1           Cat Five    
9   4           Cat Nine
11  5           Cat Eleven  
我的职能:

function childCategoryIds($id){
    $ci = & get_instance();
    $ci->load->database();

    $child_category_ids = array();

    $ci->db->where('parent_id', $id)->order_by('id', 'DESC');
    $query = $ci->db->get('categories');
    $result = $query->result();
    foreach ($result as $res):
        childCategoryIds($res->id);
        $child_category_ids[] = $res->id;
     // var_dump($res->id);
    endforeach;

    return $child_category_ids;
}
我已经从我的控制器调用了这个函数

childCategoryIds(5);    /* here id = 5 */
从函数$child\u category\u id返回id(11,4)。但是var\u dump($res->id)将所有id(11、9、4)显示到循环中。据我所知,循环只在函数中运行一次,或者当函数将自身调用到循环中时,它无法将其id推送到$child\u category\u id

我从这个函数中得到以下结果

array(2) {
    [0] => string(2) "11" 
    [1] => string(1) "4"
}
但我的预期结果是:

array(2) {
    [0] => string(2) "11" 
    [1] => string(1) "9"
    [2] => string(1) "4"
}

我遇到了一些类似的问题,但无法找到解决方案。

问题是作用域,函数中声明的变量在作用域之外看不到(即使递归调用)。如果您转储了
childCategoryIds($res->id)您可能会看到正在检索的信息,而不是存储在数组中

您可以尝试使用类似于
array\u merge
的方法将数据拉入同一个数组,或者简单地循环结果并将其添加到中,如下所示:

$result=$query->result();
foreach(结果为$res):
$children=childCategoryIds($res->id);
$child\u category\u id=array\u merge($child\u category\u id,$children);
$child\u category\u id[]=$res->id;
//变量转储($res->id);
endforeach;

$result=$query->result();
foreach(结果为$res):
$children=childCategoryIds($res->id);
foreach($childrenas$child){
$child_category_id[]=$child;
}
$child\u category\u id[]=$res->id;
//变量转储($res->id);
endforeach;