Php 向数组递归地添加值
我想获取数组的子元素ID。 从我的表中,ID5是ID4的父级,ID4是ID9的父级。 如果我调用id为5的childCategoryIds()函数,它应该返回[11,9,4],但是 它正在返回[11,4]。我的函数和sql数据如下所示: 表: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 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;