數據結構
關鍵點:需要處理源數組,使其鍵名與鍵值的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