小编典典
为此,您不需要在数据库中创建2个表,您可以仅从一个表中进行维护,如下所示
+-------+---------------+---------------------------+
| id | parent_id | title |
+-------+---------------+---------------------------+
| 1 | 0 | Parent Page |
| 2 | 1 | Sub Page |
| 3 | 2 | Sub Sub Page |
| 4 | 0 | Another Parent Page |
+-------+---------------+---------------------------+
生成的数组将像
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[title] => Parent Page
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[title] => Sub Page
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 1
[title] => Sub Sub Page
)
)
)
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Another Parent Page
)
)
您需要使用下面的递归函数来实现它
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
该算法非常简单:
取所有元素的数组和当前父代的ID(最初为0 / nothing / null / whatever)。
遍历所有元素。
如果某个元素的parent_id与您在1中获得的当前父ID匹配,则该元素是该父元素的子代。将其放入您当前的孩子列表中(此处:$ branch)。
使用您刚刚在3.中标识的元素的ID递归调用该函数,即找到该元素的所有子元素,并将它们添加为children元素。
返回找到的孩子列表。
2020-05-29