Php 如何按维度级别对数组进行分组?

Php 如何按维度级别对数组进行分组?,php,arrays,Php,Arrays,我有一个树数组,但我想按维度对数组进行分组,这样我就可以在它自己的DIV中显示树的每个级别 我的树数组是: $tree = array( 1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0, 'children'=> array( 2 => array('id'=>2, 'title'=>'Category 2', 'parent_id'

我有一个树数组,但我想按维度对数组进行分组,这样我就可以在它自己的DIV中显示树的每个级别

我的树数组是:

$tree =
array(
    1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0,
        'children'=> array(
            2 => array('id'=>2, 'title'=>'Category 2', 'parent_id'=>1, 'children'=>''),
            3 => array('id'=>3,'title'=>'Category 3','parent_id'=>1,'children'=>''),
            4 => array('id'=>4, 'title'=>'Category 4', 'parent_id'=>1,
                'children'=> array(
                    8 => array('id'=>8, 'title'=>'Category 8', 'parent_id'=>4, 'children'=>''),
                    9 => array('id'=>9, 'title'=>'Category 9', 'parent_id'=>4, 'children'=>''),
                    10 => array('id'=>10, 'title'=>'Category 10', 'parent_id'=>4,
                        'children'=> array(
                            11 => array('id'=>11, 'title'=>'Category 11', 'parent_id'=>10, 'children'=>''),
                            12 => array('id'=>12, 'title'=>'Category 12', 'parent_id'=>10, 'children'=>''),
                            13 => array('id'=>13, 'title'=>'Category 13', 'parent_id'=>10, 'children'=>'')
                        )
                    )
                )
            )
        )
    ),
    5 => array('id'=>5, 'title'=>'Category 5', 'parent_id'=>0,
        'children'=>array(
            6 => array('id'=>6,'title'=>'Category 6', 'parent_id'=>5, 'children'=>''),
            7 => array('id'=>3,'title'=>'Category 7', 'parent_id'=>5, 'children'=>'')
        )
    )
);
我想把每一层都分开。我对分组输出的想法如下:

$grouped = array(
    0 => array(
        1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0),
        5 => array('id'=>5, 'title'=>'Category 5', 'parent_id'=>0)
    ),
    1 => array(
        2 => array('id'=>2,  'title'=>'Category 2',  'parent_id'=>1),
        3 => array('id'=>3,  'title'=>'Category 3',  'parent_id'=>1),
        4 => array('id'=>4,  'title'=>'Category 4',  'parent_id'=>1),
        6 => array('id'=>6,  'title'=>'Category 6',  'parent_id'=>5),
        7 => array('id'=>3,  'title'=>'Category 7',  'parent_id'=>5)
    ),
    2 => array(
        8 => array('id'=>8,   'title'=>'Category 8',  'parent_id'=>4),
        9 => array('id'=>9,   'title'=>'Category 9',  'parent_id'=>4),
        10 => array('id'=>10, 'title'=>'Category 10', 'parent_id'=>4)
    ),
    3 => array(
        11 => array('id'=>11, 'title'=>'Category 11', 'parent_id'=>10),
        12 => array('id'=>12, 'title'=>'Category 12', 'parent_id'=>10),
        13 => array('id'=>13, 'title'=>'Category 13', 'parent_id'=>10)
    )
);
split_levels($tree, $output);
如果您有其他想法,可以使用其他方法,但我希望能够
foreach
输出数组,并在不同的DIV中显示每个级别的所有元素

例:


组数组[1]
组数组[2]
组数组[3]
组数组[4]

如何实现这一点?

下面是一个简单递归函数的示例,它将分离树数组的每一层

// begin with a reference to an empty array and level 0
function split_levels($branches, &$output = array(), $level = 0) {

    // loop over each element of the current branch
    foreach ($branches as $id => $branch) {

        // if the element has children, make a recursive call with an incremented level
        if ($branch['children']) split_levels($branch['children'], $output, $level + 1);

        // remove the children (this is optional)
        unset($branch['children']);

        // add the element to the output array at the appropriate level
        $output[$level][$id] = $branch;
    }
}
由于
$output
是此函数中的一个引用,因此应按如下方式调用它:

$grouped = array(
    0 => array(
        1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0),
        5 => array('id'=>5, 'title'=>'Category 5', 'parent_id'=>0)
    ),
    1 => array(
        2 => array('id'=>2,  'title'=>'Category 2',  'parent_id'=>1),
        3 => array('id'=>3,  'title'=>'Category 3',  'parent_id'=>1),
        4 => array('id'=>4,  'title'=>'Category 4',  'parent_id'=>1),
        6 => array('id'=>6,  'title'=>'Category 6',  'parent_id'=>5),
        7 => array('id'=>3,  'title'=>'Category 7',  'parent_id'=>5)
    ),
    2 => array(
        8 => array('id'=>8,   'title'=>'Category 8',  'parent_id'=>4),
        9 => array('id'=>9,   'title'=>'Category 9',  'parent_id'=>4),
        10 => array('id'=>10, 'title'=>'Category 10', 'parent_id'=>4)
    ),
    3 => array(
        11 => array('id'=>11, 'title'=>'Category 11', 'parent_id'=>10),
        12 => array('id'=>12, 'title'=>'Category 12', 'parent_id'=>10),
        13 => array('id'=>13, 'title'=>'Category 13', 'parent_id'=>10)
    )
);
split_levels($tree, $output);

结果将显示在
$output

中,请参见和。您可以递归实现此功能。编写一个函数,将当前级别的所有信息添加到列表中,然后(在该函数中)在“children”属性上调用函数本身。我编辑了您的问题,以添加图像中的代码,并澄清我认为您的预期目标是什么。如果不是您所想的,请随时重新编辑或回滚更改,如果您可以添加您所编写的任何代码来尝试完成此操作,这可能有助于进一步澄清问题。谢谢。对不起,我的英语不好。不用担心。很多时候,如果人们理解你的要求,他们会编辑你的语法。但是,如果您将来要问更多的问题,请尝试在问题中包含您的代码,而不是链接到图像。