gpt4 book ai didi

PHP - 如何构建树形结构列表?

转载 作者:行者123 更新时间:2023-12-02 16:06:48 25 4
gpt4 key购买 nike

所以,我的问题是,我想构建这两个表的树:

Parent table:
+-------+---------------+
| pr_id | parent_name |
+-------+---------------+
| 1 | p |
| 2 | p_0 |
| 3 | p_0_1 |
| 4 | q |
+-------+---------------+

Child table:
+-------+---------------+---------------------------+
| ch_id | pr_id | child_name |
+-------+---------------+---------------------------+
| 1 | 1 | p_0 |
| 2 | 1 | p_1 |
| 3 | 2 | p_0_0 |
| 4 | 2 | p_0_1 |
| 5 | 3 | p_0_1_0 |
| 6 | 3 | p_0_1_1 |
| 7 | 4 | q_0 |
| 8 | 4 | q_1 |
+-------+---------------+---------------------------+

树应该看起来像:

  • p
    • p_0
      • p_0_0
      • p_0_1
        • p_0_1_0
        • p_0_1_1
  • q

有人可以帮我解决递归问题吗?

最佳答案

您不需要在数据库中创建 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);

算法非常简单:

  1. 获取所有元素的数组和当前父元素的id (最初为 0/无/空/任何)。
  2. 循环遍历所有元素。
  3. 如果元素的parent_id 与您在1. 中获取的当前父元素id 匹配,则该元素是父元素的子元素。将其放入您的 list 中 当前子级的数量(此处:$branch)。
  4. 使用您刚刚在 3. 中识别的元素的 id 递归调用该函数,即找到该元素的所有子元素, 并将它们添加为子元素。
  5. 返回您找到的 child 列表。

关于PHP - 如何构建树形结构列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29384548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com