我正在写一个递归函数,如果有的话,它会找到数组的子节点。现在我想知道数组进入其中寻找其子级的级别。 表示
Array
(
[0] => stdClass Object
(
[fld_id] => 7
[fld_value] => Color
[fld_price] => 0.00
[fld_attribute_id] => 2
[fld_parent_id] => 5
[children] => Array
(
[0] => stdClass Object
(
[fld_id] => 8
[fld_value] => Red
[fld_price] => 12.00
[fld_attribute_id] => 2
[fld_parent_id] => 7
[children] => Array
(
[0] => stdClass Object
(
[fld_id] => 10
[fld_value] => light red
[fld_price] => 20.00
[fld_attribute_id] => 2
[fld_parent_id] => 8
[children] => Array
(
)
)
[1] => stdClass Object
(
[fld_id] => 11
[fld_value] => dark red
[fld_price] => 4.00
[fld_attribute_id] => 2
[fld_parent_id] => 8
[children] => Array
(
[0] => stdClass Object
(
[fld_id] => 14
[fld_value] => double_dark
[fld_price] => 3.00
[fld_attribute_id] => 2
[fld_parent_id] => 11
[children] => Array
(
)
)
[1] => stdClass Object
(
[fld_id] => 15
[fld_value] => single_dark
[fld_price] => 0.00
[fld_attribute_id] => 2
[fld_parent_id] => 11
[children] => Array
(
)
)
)
)
)
)
[1] => stdClass Object
(
[fld_id] => 9
[fld_value] => Green
[fld_price] => 5.00
[fld_attribute_id] => 2
[fld_parent_id] => 7
[children] => Array
(
)
)
)
)
)
我的递归函数在下面,它是用codeigniter helper编写的
function get_children_by_par_id($parent_id)
{
$children = get_children($parent_id);
$return_value = array();
foreach($children->result() as $result)
{
$result->children = get_children_by_par_id($result->fld_id);
$return_value[]= $result;
}
return ($return_value);
}
function get_children($id){
$CI = get_instance();
$CI->db->where('fld_parent_id',$id);
return $CI->db->get('tbl_attribute_values');
}
现在我想要计算数组的深度,它使用相同的递归函数进入内部的程度,我试图计算它在递归函数中进入的级别,即get_children_by_par_id($parent_id)
。但由于递归函数计数初始化为其原始值。所以我需要在帮助器中创建一个全局变量。所以任何人都可以帮助我......或者你能给我最好的想法来计算数组的深度吗?是的数组可以进入n级 ......
答案 0 :(得分:0)
这帮助了我go here。我做了一些扭曲并转向代码,为了进一步参考,你可以Visit here。你可以在codeigniter中创建一个全局变量。
答案 1 :(得分:0)
您可以声明一个变量来计算班级中的等级,然后用它来计算函数get_children_by_par_id
中的等级。
正如您在test_function
中看到的那样,在调用函数后可以得到$count
变量的值,如果需要再次调用该函数,则必须重置它。
class yourClass extends somthing{
$count = 0;
function get_children_by_par_id($parent_id){
$children = get_children($parent_id);
$return_value = array();
foreach($children->result() as $result){
$result->children = get_children_by_par_id($result->fld_id);
$this->count++;
$return_value[]= $result;
}
return ($return_value);
}
function get_children($id){
$CI = get_instance();
$CI->db->where('fld_parent_id',$id);
return $CI->db->get('tbl_attribute_values');
}
function test_function(){
$childs = $this->get_children_by_par_id(1);
$childs_count = $this->count; // get the levels count
$this->count = 0; //reset the counter
}
}