做菜單的時候,我們需要將擁有父子關系的數據,組成一個有層級關系的數組,方便我們渲染數據。一般我們的數據表會這么設計
| id | name | pid |
| --- | --- | --- |
| 1 | 江蘇 | 0 |
| 2 | 南京 | 1 |
這樣就可以清晰的記錄好層級關系。下面依舊采取我之前用的地區表 area 來展示這個方法
~~~
/**
* 子孫樹
* @param unknown $data
* @return unknown
*/
function subtree($data){
// 整理數組
foreach($data as $key=>$vo){
$res[$vo['id']] = $vo;
$res[$vo['id']]['children'] = [];
}
unset( $data );
// 查詢子孫
foreach($res as $key=>$vo){
if( $vo['pid'] != 0 ){
$res[$vo['pid']]['children'][] = &$res[$key];
}
}
// 去除雜質
foreach($res as $key=>$vo){
if($vo['pid'] == 0){
$tree[] = $vo;
}
}
unset($res);
return $tree;
}
~~~
驗證
~~~
$area = db('area')->select();
print_r(subtree($area));die;
~~~
整理格式如下:
