PHP>从嵌套的集合模型平面数组中形成一个多维数组

Lay*_*yke 1 php

好吧,基本上,我已经形成了一个mySQL查询,它返回一个完全按我的数据结构排序的数据集.如果我要声明它,它看起来像这样:

$arr = array(
        array( 'name' => 'Root', 'depth' => 0 ),
        array( 'name' => 'Food', 'depth' => 0 ),
        array( 'name' => 'Fruit', 'depth' => 1 ),
        array( 'name' => 'Bannnanna', 'depth' => 2 ),
        array( 'name' => 'Apple', 'depth' => 2 ),
        array( 'name' => 'Bannnanna', 'depth' => 2 ),
        array( 'name' => 'Meat', 'depth' => 1 ),
        array( 'name' => 'Furniture', 'depth' => 0 )
        );
Run Code Online (Sandbox Code Playgroud)

我想要的是将这个$ arr提供给一个方法,这样我就可以得到一个多维数组.

例如,Fruit将是Food的孩子.而Bananana将是Fruit的孩子.我需要每个'孩子'的钥匙是'页面'.

我上面显示的数组也可以返回其他信息,如'lft'和'rgt'.我没有'parentId'设置,但如果需要我可以更改我的模型,但我更喜欢坚持使用嵌套集模型.

use*_*291 5

也许这样的事情

            $arr = array(
                    array( 'name' => 'Root', 'depth' => 0 ),
                    array( 'name' => 'Food', 'depth' => 0 ),
                    array( 'name' => 'Fruit', 'depth' => 1 ),
                    array( 'name' => 'Bannnanna', 'depth' => 2 ),
                    array( 'name' => 'Apple', 'depth' => 2 ),
                    array( 'name' => 'Bannnanna', 'depth' => 2 ),
                    array( 'name' => 'Meat', 'depth' => 1 ),
                    array( 'name' => 'Furniture', 'depth' => 0 )
                    );

            $p = array(array());
            foreach($arr as $n => $a) {
                $d = $a['depth'] + 1;
                $p[$d - 1]['children'][] = &$arr[$n];
                $p[$d] = &$arr[$n];
            }

            print_r($p[0]);
Run Code Online (Sandbox Code Playgroud)