我从MySQL数据库返回页面及其父页面的列表,并将所有结果放入数组,如下所示,其中每个结果都是一个数组,其中包括论坛的父代,名称和ID(数组页面的键也是与页面ID相同)。

为了模型和应用,还有一些其他参数。

  • “根页面”的父级为0
  • 没有孤立的页面

  • 因此,MySQL查询将返回此数据集。
    pages=>
         [1] => array(id=>1,
                      parent=>0,
                      name=>Hello World)
         [2] => array(id=>1,
                      parent=>1,
                      name=>Child of Hello World)
         [3] => array(id=>1,
                      parent=>0,
                      name=>Brother of Hello World)
         [4] => array(id=>4,
                      parent=>2,
                      name=Grand-child of Hello World)
         [6] => array(id=>6,
                      parent=>4,
                      name=Great-grand-child of Hello World)
    

    然后我想将数组转换为如下所示的内容
    pages=>
         [1] => id=>1,
                name=>Hello World
                children=>
    
                    [2] => id=>1
                           name=>Child of Hello World
                           children=>
    
                               [4] =>
                                 id=>4
                                 name=> Grand-child of Hello World)
                                 children=>
    
                                     [6] =>
                                       id=>6
                                       name=> Great-grand-child of Hello World
                                       children= null
    
         [3] => array(id=>1,
                      name=>Brother of Hello World
                      children=>null
    

    因此,基本上,我想将线性数组转换为嵌套的多维数组,以便可以打印站点地图。

    它必须是一个递归解决方案。超过700页,最多5或6级。

    我只想做1个mysql查询。不是700,所以请不要给我基于mysql的解决方案。

    最佳答案

    <?php
    
    $pages = array();
    $pages[1] = array('id' => 1, 'parent' => 0, 'name' => 'Hello World');
    $pages[2] = array('id' => 1, 'parent' => 1, 'name' => 'Child of Hello World');
    $pages[3] = array('id' => 1, 'parent' => 0, 'name' => 'Brother of Hello World');
    $pages[4] = array('id' => 4, 'parent' => 2, 'name' => 'Grand-child of Hello World');
    $pages[6] = array('id' => 6, 'parent' => 4, 'name' => 'Great-grand-child of Hello World');
    
    $children = array();
    foreach($pages as $key => $page){
        $parent = (int)$page['parent'];
        if(!isset($children[$parent]))
            $children[$parent] = array();
        $children[$parent][$key] = array('id' => $page['id'], 'name' => $page['name']);
    }
    
    $new_pages = recursive_append_children($children[0], $children);
    
    function recursive_append_children($arr, $children){
        foreach($arr as $key => $page)
            if(isset($children[$key]))
                $arr[$key]['children'] = recursive_append_children($children[$key], $children);
        return $arr;
    }
    
    print_r($new_pages);
    
    ?>
    

    输出:
    Array
    (
        [1] => Array
            (
                [id] => 1
                [name] => Hello World
                [children] => Array
                    (
                        [2] => Array
                            (
                                [id] => 1
                                [name] => Child of Hello World
                                [children] => Array
                                    (
                                        [4] => Array
                                            (
                                                [id] => 4
                                                [name] => Grand-child of Hello World
                                                [children] => Array
                                                    (
                                                        [6] => Array
                                                            (
                                                                [id] => 6
                                                                [name] => Great-grand-child of Hello World
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
        [3] => Array
            (
                [id] => 1
                [name] => Brother of Hello World
            )
    )
    

    10-07 19:16
    查看更多