ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
做菜单的时候,我们需要将拥有父子关系的数据,组成一个有层级关系的数组,方便我们渲染数据。一般我们的数据表会这么设计 | 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)