Php 如何按维度级别对数组进行分组?
我有一个树数组,但我想按维度对数组进行分组,这样我就可以在它自己的DIV中显示树的每个级别 我的树数组是: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'
$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”属性上调用函数本身。我编辑了您的问题,以添加图像中的代码,并澄清我认为您的预期目标是什么。如果不是您所想的,请随时重新编辑或回滚更改,如果您可以添加您所编写的任何代码来尝试完成此操作,这可能有助于进一步澄清问题。谢谢。对不起,我的英语不好。不用担心。很多时候,如果人们理解你的要求,他们会编辑你的语法。但是,如果您将来要问更多的问题,请尝试在问题中包含您的代码,而不是链接到图像。