我有一系列看起来像
的类别array(
array(
'id' => '1',
'path' => '1',
'children_count' => '16',
'name' => 'A'
),
array(
'id' => '3',
'path' => '1/2/3',
'children_count' => '0',
'name' => 'C'
),
array(
'id' => '2',
'path' => '1/2',
'children_count' => '9',
'name' => 'B'
),
array(
'id' => '4',
'path' => '1/2/4',
'children_count' => '0',
'name' => 'D'
)
)
我正在尝试构建的是一个层级数组(path
键显示基于id
的关系),因此输出的顺序正确(首先是root父级,然后是子级,然后是更多的孩子)并根据孩子的下降程度缩进name
。最终结果应该类似于:
A
-B
--C
--D
这是我到目前为止所拥有的,但显然不起作用
$categoryTree = array();
foreach ($categories as $category) {
$categoryTree[(string)$category['path']] = str_repeat("-", substr_count($category['path'], "/")) . $category['name'];
}
ksort($categoryTree);
var_export($categoryTree);
其中包括:
array (
'1/2' => '-B',
'1/2/3' => '--C',
'1/2/4' => '--D',
1 => 'A'
)
如何以正确的顺序获取这些内容? (如果兄弟姐妹可以通过id
订购也是花花公子的话)
答案 0 :(得分:1)
计算生成值前缀的斜杠数,然后按路径(键)排序?
foreach ($categories as $category)
$output[$category['path']] =
str_repeat('-', substr_count($category['path'], '/')) . $category['name'];
ksort($output, SORT_STRING);
答案 1 :(得分:1)
这是基于One Trick Pony的答案,但正确处理多个数字的ID。
foreach ($categories as $category)
$output[$category['path']] =
str_repeat('-', substr_count($category['path'], '/')) . $category['name'];
$paths = array_keys($output);
natsort($paths);
foreach ($paths as $path) {
echo $output[$path], "\n";
}