【发布时间】:2015-12-23 22:44:34
【问题描述】:
各位 PHP 程序员,请考虑以下 DB 结果:
+---------+-----------+---------------+--------+
| node_id | parent_id | path | branch |
+---------+-----------+---------------+--------+
| 1 | 0 | /1/ | NULL |
| 2 | 1 | /1/2/ | NULL |
| 3 | 2 | /1/2/3/ | 1 |
| 4 | 3 | /1/2/3/4/ | 1 |
| 8 | 4 | /1/2/3/4/8/ | 1 |
| 9 | 8 | /1/2/3/4/8/9/ | 1 |
| 7 | 4 | /1/2/3/4/7/ | 0 |
| 5 | 2 | /1/2/5/ | 0 |
| 6 | 5 | /1/2/5/6/ | 0 |
+---------+-----------+---------------+--------+
如何获得以下 PHP 数组:
[
[
'id' => 1,
'parentId' => 0,
],
[
'id' => 2,
'parentId' => 1,
'nodes' => [
[ // when branch == 0
[
'id' => 5,
'parentId' => 2
],
[
'id' => 6,
'parentId' => 5
],
],
[ // when branch == 1
[
'id' => 3,
'parentId' => 2
],
[
'id' => 4,
'parentId' => 3,
'nodes' => [
[ // when branch == 0
[
'id' => 7,
'parentId' => 4
],
],
[ // when branch == 1
[
'id' => 8,
'parentId' => 4
],
[
'id' => 9,
'parentId' => 8
],
]
]
],
]
]
]
]
该功能应该具有无限的深度。
任何帮助将不胜感激,因为我一直在碰壁。
【问题讨论】:
-
请给我们看看墙(我指的是墙,我的意思是你尝试过的xD)...
-
我的尝试包括通过 id 进行一次通过索引,然后通过第二次通过找出放置具有分支的节点的位置。它仅适用于一级递归,并且与您在此处看到的非常相似:blog.tekerson.com/2009/03/03/…。不幸的是,我因为沮丧而删除了它;)
标签: php arrays nested adjacency-matrix