数据结构
关键点:需要处理源数组,使其键名与键值的id相等。
level主要为了显示方便,不是关键字段。根据需求,还可以加上rid(root_id)来记录根。
$items = array(
1 => array('id'=>1, 'pid' => 0, 'name'=>'1层1', 'level' => 1),
2 => array('id'=>2, 'pid' => 0, 'name'=>'1层2', 'level' => 1),
3 => array('id'=>3, 'pid' => 1, 'name'=>'2层1', 'level' => 2),
4 => array('id'=>4, 'pid' => 1, 'name'=>'2层2', 'level' => 2),
5 => array('id'=>5, 'pid' => 3, 'name'=>'3层1', 'level' => 3),
6 => array('id'=>6, 'pid' => 4, 'name'=>'3层2', 'level' => 3),
7 => array('id'=>7, 'pid' => 5, 'name'=>'4层1', 'level' => 4),
8 => array('id'=>8, 'pid' => 6, 'name'=>'4层2', 'level' => 4),
9 => array('id'=>9, 'pid' => 7, 'name'=>'5层1', 'level' => 5),
);
一个函数
将数据处理成树形
function generateTree($items) {
$tree = array();
foreach($items as $item) {
if (isset($items[$item['pid']])) {
$items[$item['pid']]['children'][] = &$items[$item['id']];
} else {
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
如何输出
这里只展示核心思路,可自行修改美化。
function getTreeData($tree)
{
foreach($tree as $t) {
echo str_repeat('-', $t['level']) . $t['name'] . '<br>';
if (isset($t['children'])) {
getTreeData($t['children']);
}
}
}
getTreeData($tree);
结果是这样
-1层1
--2层1
---3层1
----4层1
-----5层1
--2层2
---3层2
----4层2
-1层2