gpt4 book ai didi

php - 如何从数据库的平面数组中创建嵌套注释数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:52 27 4
gpt4 key购买 nike

在查询数据库中嵌套在闭包表中的评论之后,就像 Bill Karwin 在此处建议的那样 What is the most efficient/elegant way to parse a flat table into a tree? ,我现在从 SQL 中得到以下数据结构:

"comments": [
{
"id": "1",
"breadcrumbs": "1",
"body": "Bell pepper melon mung."
},
{
"id": "2",
"breadcrumbs": "1,2",
"body": "Pea sprouts green bean."
},
{
"id": "3",
"breadcrumbs": "1,3",
"body": "Komatsuna plantain spinach sorrel."
},
{
"id": "4",
"breadcrumbs": "1,2,4",
"body": "Rock melon grape parsnip."
},
{
"id": "5",
"breadcrumbs": "5",
"body": "Ricebean spring onion grape."
},
{
"id": "6",
"breadcrumbs": "5,6",
"body": "Chestnut kohlrabi parsnip daikon."
}
]

我想使用 PHP 重构这个数据集,所以评论是这样嵌套的:

"comments": [
{
"id": "1",
"breadcrumbs": "1",
"body": "Bell pepper melon mung."
"comments": [
{
"id": "2",
"breadcrumbs": "1,2",
"body": "Pea sprouts green bean."
"comments": [
{
"id": "4",
"breadcrumbs": "1,2,4",
"body": "Rock melon grape parsnip."
}
]
},
{
"id": "3",
"breadcrumbs": "1,3",
"body": "Komatsuna plantain spinach sorrel."
}
]
},
{
"id": "5",
"breadcrumbs": "5",
"body": "Ricebean spring onion grape."
"comments": [
{
"id": "6",
"breadcrumbs": "5,6",
"body": "Chestnut kohlrabi parsnip daikon."
}
]
}
]

我已经找到了一个解决方案,但它似乎过于复杂,而且我觉得有一些聪明的解决方案可以优雅高效地完成此任务,但我不知道如何做?

最佳答案

假设您将所有数据提取到一个由“id”索引的数组中:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$nodes[$row["id"]] = $row;
}

我测试了以下内容,它可以生成您想要的 JSON 输出:

foreach ($nodes as &$node) {
$parent = array_shift(array_slice(explode(",",$node["breadcrumbs"]), -2, 1));
if ($parent == $node["id"]) {
$forest["comments"][] = &$node;
} else {
$nodes[$parent]["comments"][] = &$node;
}
}

print json_encode($forest, JSON_PRETTY_PRINT);

关于php - 如何从数据库的平面数组中创建嵌套注释数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348694/

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