- 查询应用得到带pid的二维数组
slect id,pid,name from departments order by id asc;
// 得到数组
$items = [
['id' => 1, 'pid' => 0, 'name' => '销售部'],
['id' => 2, 'pid' => 0, 'name' => '技术部'],
['id' => 3, 'pid' => 1, 'name' => '销售1部'],
['id' => 4, 'pid' => 3, 'name' => '销售小1部'],
['id' => 6, 'pid' => 4, 'name' => '销售小小1部'],
['id' => 5, 'pid' => 1, 'name' => '销售2部'],
['id' => 7, 'pid' => 2, 'name' => '技术1部'],
];
- 构建应用
// 2. 通过部门数据构建带层级的数据
function buildTreeMenu($items,$root = 0){
$tree = [];
$packData = [];
foreach ($items as $data) {
$packData[$data["id"]] = $data;
}
foreach ($packData as $key => $val) {
if ($val["pid"] == $root) {
//代表跟节点, 重点一
$tree[] = &$packData[$key];
} else {
//找到其父类,重点二
$packData[$val["pid"]]["childs"][] = &$packData[$key];
}
}
return $tree;
}
var_dump(buildTreeMenu($items));