配列の子があればそれを見つける再帰関数を書いています。今、配列がその子を見つけるために入るレベルを知りたいです。例えば
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ヘルパーで書かれています
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)
。しかし、再帰関数により count は元の値に初期化されます。そのため、ヘルパーでグローバル変数を作成する必要があります。誰でもここで私を助けることができます....または、配列の深さを数えるための最良のアイデアを教えてください.はい、配列はnレベルに行くことができます...