Php 如何在树状视图结构中显示阵列?
我想构建一个由部门(父部门)和子部门(子部门)组成的树视图。在我的数据库中,我认为我有一个很好的结构,如下所示:Php 如何在树状视图结构中显示阵列?,php,html,arrays,codeigniter,treeview,Php,Html,Arrays,Codeigniter,Treeview,我想构建一个由部门(父部门)和子部门(子部门)组成的树视图。在我的数据库中,我认为我有一个很好的结构,如下所示: -------------------------------------------- Dep_name | dep_id | dep_parent_id -------------------------------------------- Accounting | 1 | 0 Human-Resources
--------------------------------------------
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
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
)
)
)
)
部门父部门id为0的部门--->它们没有父部门。例如,Web开发和网络是IT部门的子部门。前端和后端是Web开发的产物
我找到了一个递归函数,它适合于从这个数据库表中获取所有数据,并将它们放在一个正确结构的数组中。但问题是我不知道如何像树状视图一样显示这个数组。
比如像这样
- 部门
- 会计
- 人力资源
- 它
- 网络
- 网络开发
- 前端
- 后端
--------------------------------------------
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
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
)
)
)
)
我已经尝试使用一种非常简单的方法打印数组
print_r($tree);
它像这样打印:
--------------------------------------------
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
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)
函数排序(array$array):array返回的array$branch以html格式显示树视图结构,我将不胜感激
{
$sort=[];
foreach($数组作为$项){
如果($item->dep\u parent\u id!==0){
$sort[$item->dep\u parent\u id][$item->dep\u id]=$item->dep\u name;
继续;
}
$sort[$item->dep_id][0]=$item->dep_name;
}
返回$sort;
}
您需要一个递归函数来检查对象的子属性是否存在,如果存在,则在循环这些元素之前打印出一个新的
标记
函数printree($array){
$output=“\n”;
foreach($a数组){
$output.=“- ”$a->Dep\u name.
\n”;
如果(isset($a->children)){
$output.=printree($a->children);
}
}
$output.=“
\n”;
返回$output;
}
这将返回一个字符串,该字符串在描述的层次结构中包含HTML。输出将是这样的(好吧,不是像这样缩进,但是HTML将打印相同的内容)
- 会计和财务
- 人力资源
- 它
- 网络
- 网络开发
- 前端
- 后端
- 市场营销
- 网络营销
您的问题是什么,确切地说。。?如何打印?是的,我的意思是如何使用html在树状视图结构中打印数组我知道如何构建数组,但我不知道如何使用html中的无序列表以树状视图的形式显示数组。所以我不能用这个来回答我的问题。