1

配列の子があればそれを見つける再帰関数を書いています。今、配列がその子を見つけるために入るレベルを知りたいです。例えば

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レベルに行くことができます...

4

2 に答える 2