【发布时间】:2021-02-12 16:36:13
【问题描述】:
我在转换平面数组时遇到问题,例如从数据库查询到树结构。 我有这样的事情:
[
[
id => 11,
path => '/11',
label => 'AAA'
],
[
id => 12,
path => '/12',
label => 'BBB'
],
[
id => 21,
path => '/12/21',
label => 'BBBB'
],
[
id => 21,
path => '/12/22',
label => 'CCCCC'
],
]
path 指向树内的层次位置,由 id 定义。所以最后我必须得到这样的东西:
$tree=[
[
'id' => '11',
'label' => 'AAA'
],
[
'id' => '12',
'label' => 'BBB',
'children' => [
[
'id' => '21',
'label' => 'BBBB'
],
[
'id' => '22',
'label' => 'CCCCC'
]
]
]
];
深度可以是无限的。我将不胜感激任何解决方案。谢谢你:-)
【问题讨论】:
-
对不起,你为什么要做这种可怕的事情?
-
假设这是可能的。当你访问一个id为
'/x/y'的节点时,你可以保证你已经访问过id为'/x'的节点? -
您能否发布您已经拥有的代码以及它失败的地方?
-
@AndréWalker 开始的结构来自 Moodle insatnce,它以这种方式组织其类别。提供分层选择菜单的 Vue 组件需要目标结构。所以,我别无选择。
-
@AndréWalker 一开始你有一个扁平的结构,你可以用任何方式对它进行排序,例如你可以按路径的深度对条目进行排序。这样你就可以保证你已经访问过'x'了。