Как пройти через дочерний массив уровня N - PHP - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть категория и подкатегория. У меня есть этот тип массива.

Может кто-нибудь помочь мне, как я могу пройти через 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
                (
                )

        )

)

Я перебираю основной массив, но я не знаю, как я могу перебрать дочерние, так как, возможно, у вас может быть много дочерних массивов.

{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} 

Поскольку я не могу сделать статические, просто применив ключ к массиву Children, так как он может иметь n-уровень. Ну, это мой файл TPL, поэтому я не могу редактировать запросы, которые я принес в этом формате данных.

1 Ответ

0 голосов
/ 13 сентября 2018

Вам нужно рекурсивно перебирать массив.

Например:

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');
        }
    }
}
...