gpt4 book ai didi

php - 从数据库元素中提取元素等

转载 作者:太空宇宙 更新时间:2023-11-04 13:29:31 25 4
gpt4 key购买 nike

例如,我想从数据库中提取几行:

例如,它们有 id, name, parent

0, element1, noparent
1, element2, 0
2, element3, 1
3, element4, 2

等等……

我想将它们一个输出到另一个(在 html 中)

<div id=0 data-name=element1>
<div id=1 data-name=element2>
<div id=2 data-name=element3>
<div id=3 data-name=element4>
</div>
<div>
</div>
</div>

并且可以有很多可能性。那么我需要的是如何依靠 parent 将它们一个输出到另一个?

(再一次,(如果你不明白 :))它们可以是 100 个一个在另一个里面......我该怎么做?)

最佳答案

无需进入有关如何从数据库中获取内容的完整教程,只要说使用 fetchObject 很重要就够了。而不是为了使这种方法起作用而获取数组的方法之一:

$stmt = $pdo->query('SELECT id, name, parent FROM your_table');

while ($row = $stmt->fetchObject()) {
$data[$row->id] = $row;
}

这将为您提供一组使用 id 作为键的 stdClass 对象。因为the way objects are passed在 PHP 中,构建树比使用多维数组要容易得多。

foreach ($data as $element) {
if ($element->parent !== null) {
$data[$element->parent]->children[] = $element;
}
}
$tree = array_filter($data, function($x) { return $x->parent === null; });

如果你很难看出这是在做什么,你可以在不同的点var_dump $data$tree 数组来看看它们的样子(或者更好,使用 actual debugger )。这不应该像看起来那样难以内存,因为进入 children[] 的东西是对象标识符的副本,而不是整个对象的新副本。 array_filter 步骤只是将数组限制为根级(无父级)元素。

构建树后,您可以使用 recursive 以您想要的格式输出它功能。

function outputTree($tree) {
$output = '';
foreach ($tree as $branch) {
$output .= "<div id='$branch->id' data-name='$branch->name'>";
if (isset($branch->children)) {
$output .= outputTree($branch->children);
}
$output .= '</div>';
}
return $output;
}

echo outputTree($tree);

我还没有用接近 100 级的任何东西对此进行测试,但理论上它可以工作到无限深度。将事物放入数据库时​​请小心,不要创建它们自身的后代,否则您将在时空连续体中制造裂缝并摧毁宇宙,或者至少是您的脚本。

关于php - 从数据库元素中提取元素等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599555/

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