代码之家  ›  专栏  ›  技术社区  ›  Bits Please

如何循环N级子数组-PHP

  •  1
  • Bits Please  · 技术社区  · 6 年前

    我有类别和子类别。我有这种类型的数组。

    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} 
    

    因为我不能通过对子数组应用键来实现静态,因为它可以有n级。这是我的tpl文件,所以我不能编辑我带来的这种数据格式的查询。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Cid Gordon    6 年前

    您需要递归地遍历数组。

    例如:

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