🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
做菜单的时候,我们需要将拥有父子关系的数据,组成一个有层级关系的数组,方便我们渲染数据。一般我们的数据表会这么设计 | 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; ~~~ 整理格式如下: ![](https://box.kancloud.cn/fb1b02b1d404b73d7310f6d074b0386b_607x953.jpg)