简体   繁体   English

如何遍历N级子子数组-PHP

[英]How to loop through N level Sub Child Array - PHP

I have category and Sub category. 我有类别和子类别。 I have got this type of array. 我有这种类型的数组。

Can anyone help me how can I loop through n-level. 谁能帮助我如何遍历n级。

Array
(
    [0] => Array
        (
            [question_title] => hello.
            [id] => 1
            [step] => 1
            [Children] => Array
                (
                )

        )

    [1] => Array
        (
            [question_title] => bye
            [id] => 2
            [step] => 1
            [Children] => Array
                (
                )

        )

    [2] => Array
        (
            [question_title] => gtg
            [id] => 3
            [step] => 1
            [Children] => Array
                (
                )

        )

    [3] => Array
        (
            [question_title] => cya
            [id] => 4
            [step] => 1
            [Children] => Array
                (
                )

        )

    [4] => Array
        (
            [question_title] => not sure
            [id] => 5
            [step] => 1
            [Children] => Array
                (
                )

        )

    [5] => Array
        (
            [question_title] => will see 
            [id] => 6
            [step] => 1
            [Children] => Array
                (
                )

        )

    [6] => Array
        (
            [question_title] =>idk
            [id] => 7
            [step] => 2
            [Children] => Array
                (
                )

        )

    [7] => Array
        (
            [question_title] => mayebthis 
            [id] => 8
            [step] => 2
            [Children] => Array
                (
                )

        )

    [8] => Array
        (
            [question_title] => maybe this one as well
            [id] => 9
            [step] => 2
            [Children] => Array
                (
                    [0] => Array
                        (
                            [question_title] => maybe this one too
                            [id] => 10
                            [step] => 2
                            [Children] => Array
                                (
                                )

                        )

                )

        )

    [9] => Array
        (
            [question_title] => and this
            [id] => 11
            [step] => 2
            [Children] => Array
                (
                    [0] => Array
                        (
                            [question_title] => or this
                            [id] => 12
                            [step] => 2
                            [Children] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [question_title] =>or here too
                            [id] => 13
                            [step] => 2
                            [Children] => Array
                                (
                                    [0] => Array
                                        (
                                            [question_title] => wait i am also here
                                            [id] => 14
                                            [step] => 2
                                            [Children] => Array
                                                (
                                                )

                                        )

                                    [1] => Array
                                        (
                                            [question_title] => me as well
                                            [id] => 15
                                            [step] => 2
                                            [Children] => Array
                                                (
                                                )

                                        )

                                    [2] => Array
                                        (
                                            [question_title] => me me scream 
                                            [id] => 16
                                            [step] => 2
                                            [Children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [10] => Array
        (
            [question_title] => outside here
            [id] => 17
            [step] => 2
            [Children] => Array
                (
                )

        )

    [11] => Array
        (
            [question_title] => outisde here too
            [id] => 18
            [step] => 2
            [Children] => Array
                (
                )

        )

)

I am looping through main array, But I dont know how can I loop through Children as maybe thre can be many sub children array as well. 我正在遍历主数组,但是我不知道如何遍历子数组,因为可能还有许多子子数组。

{foreach $question_master_array as $key => $val}
          {if $question_master_array[$key]['step'] == 2}
            <li><input type="checkbox" name="step1_question_{$question_master_array[$key]['question_id']}">{$question_master_array[$key]['question_title']}</li>
            {if  $question_master_array[$key]['Children']|@count gt 0}
                ... some stuff here ...
            {/if} 
          {/if}
        {/foreach} 

As I can't make static by just applying key to Children array as it can have n-level. 因为我不能仅通过将键应用于Children数组来使其静态,因为它可以具有n级。 Well this is my tpl file so I cant edit the queries I have brought in this format of data. 好吧,这是我的tpl文件,因此我无法编辑以这种数据格式带来的查询。

You need to recursively iterate through the array. 您需要递归遍历数组。

In example : 例如:

function recurSearch($array, $depth = 0)
{
    echo ('Current depth : ' . $depth);
    foreach ($array as $item)
    {
        echo ('id : ' . $item['id']);
        echo ('question title : ' . $item['question_title']);
        echo ('step : ' . $item['step']);

        if (count($item['Children']) > 0)
        {
            echo 'child : ';
            echo '{';
            /*
             * If $item['Children'] isn't empty,
             * the function will be called again
             * using $item['Children'] as main array
             * That function will keep being called until $item['Children'] is empty
             */
            recurSearch($item['Children'], $depth + 1);
            echo '}';
        }
        else
        {
            echo ('child : no child');
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM