gpt4 book ai didi

php - 如何在 TreeView 结构中显示数组?

转载 作者:行者123 更新时间:2023-11-28 02:22:00 24 4
gpt4 key购买 nike

我想构建一个由部门(父)和子部门(子)组成的 TreeView 。在我的数据库中,我认为我有一个很好的结构,如下所示:

--------------------------------------------
Dep_name | dep_id | dep_parent_id
--------------------------------------------
Accounting | 1 | 0
Human-Resources | 2 | 0
IT | 3 | 0
Network | 4 | 3
Web Development | 5 | 3
Front-End | 6 | 5
Back-End | 7 | 5

dep_parent_id 为 0 的部门 ---> 它们没有上级部门。例如,Web Development 和 Network 是 IT 部门的子部门。前端和后端是 Web 开发的子项。

我找到了一个递归函数,它适用于从此数据库表中获取所有数据并将它们放入正确结构的数组中。但问题是我不知道如何像 TreeView 一样显示这个数组。比如这样

  • 部门
    • 会计
    • 人力资源
    • 网络
    • 网络开发
      • 前端
      • 后端

.....等等....

在我的数据库中,我认为我有一个像这样的好结构:

enter image description here

我尝试使用

以非常简单的方式打印数组
print_r($tree);

然后它打印成这样:

Array (
[0] => stdClass Object (
[Dep_name] => Accounting and Finance
[dep_id] => 1
[dep_parent_id] => 0
)
[1] => stdClass Object (
[Dep_name] => Human-Recources
[dep_id] => 2
[dep_parent_id] => 0
)
[2] => stdClass Object (
[Dep_name] => IT
[dep_id] => 3
[dep_parent_id] => 0
[children] => Array (
[0] => stdClass Object (
[Dep_name] => Network
[dep_id] => 5
[dep_parent_id] => 3
)
[1] => stdClass Object (
[Dep_name] => Web Development
[dep_id] => 6
[dep_parent_id] => 3
[children] => Array (
[0] => stdClass Object (
[Dep_name] => Front-End
[dep_id] => 7
[dep_parent_id] => 6
)
[1] => stdClass Object (
[Dep_name] => Back-End
[dep_id] => 8
[dep_parent_id] => 6
)
)
)
)
)
[3] => stdClass Object (
[Dep_name] => Marketing
[dep_id] => 4
[dep_parent_id] => 0
[children] => Array (
[0] => stdClass Object (
[Dep_name] => web-marketing
[dep_id] => 9
[dep_parent_id] => 4
)
)
)
)

这是我的函数,它从数组 $data 的数据库表中获取数据并构建一个树形数组 $branch。

function buildTree(array $data, $parentId = 0) 
{
$branch = array();

foreach ($data as $element)
{
if ($element->dep_parent_id == $parentId)
{
$children = buildTree($data, $element->dep_id);
if ($children)
{
$element->children = $children;
}
$branch[] = $element;
}

}

return $branch;
}

然后我用 :

打印它
print_r(buildTree($data));

如果您能帮助我解决这个问题并在我从函数 buildTree($data) 返回的数组 $branch 中以 html 格式显示 TreeView 结构,我将不胜感激。

最佳答案

你需要一个递归函数来检查 children对象的属性存在 - 如果存在,打印出一个新的 <ul>在循环这些元素之前标记。

function printTree($array) {
$output = "<ul>\n";
foreach ($array as $a) {
$output .= "<li>".$a->Dep_name."</li>\n";

if (isset($a->children)) {
$output .= printTree($a->children);
}
}
$output .= "</ul>\n";
return $output;
}

这将返回一个字符串,其中包含描述的层次结构中的 HTML。输出将是这样的(好吧,不是这样缩进,但 HTML 将打印相同)

<ul>
<li>Accounting and Finance</li>
<li>Human-Recources</li>
<li>IT</li>
<ul>
<li>Network</li>
<li>Web Development</li>
<ul>
<li>Front-End</li>
<li>Back-End</li>
</ul>
</ul>
<li>Marketing</li>
<ul>
<li>web-marketing</li>
</ul>
</ul>

关于php - 如何在 TreeView 结构中显示数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921377/

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