前言
咱们在开发的过程当中,一定会遇到需要将一组数据处理为树形结构返回给前端,或者是需要这样的树形结构。
需要处理的数据结构
[
{
"admin_menu_id": 396,
"menu_pid": 0,
"menu_name": "欢迎",
"menu_url": "admin/CommonData/list",
"menu_sort": 400,
"is_menu": 1
},
{
"admin_menu_id": 1,
"menu_pid": 0,
"menu_name": "控制台",
"menu_url": "",
"menu_sort": 300,
"is_menu": 0
},
{
"admin_menu_id": 49,
"menu_pid": 1,
"menu_name": "首页",
"menu_url": "admin/AdminIndex/index",
"menu_sort": 200,
"is_menu": 0
},
{
"admin_menu_id": 172,
"menu_pid": 1,
"menu_name": "会员统计",
"menu_url": "admin/AdminIndex/member",
"menu_sort": 200,
"is_menu": 0
}
]
处理完以后的数据
[
{
"admin_menu_id": 396,
"menu_pid": 0,
"menu_name": "欢迎",
"menu_url": "admin/CommonData/list",
"menu_sort": 400,
"is_menu": 1
},
{
"admin_menu_id": 1,
"menu_pid": 0,
"menu_name": "控制台",
"menu_url": "",
"menu_sort": 300,
"is_menu": 0,
"children": [
{
"admin_menu_id": 49,
"menu_pid": 1,
"menu_name": "首页",
"menu_url": "admin/AdminIndex/index",
"menu_sort": 200,
"is_menu": 0
},
{
"admin_menu_id": 172,
"menu_pid": 1,
"menu_name": "会员统计",
"menu_url": "admin/AdminIndex/member",
"menu_sort": 200,
"is_menu": 0
}
]
}
]
代码实现
主要代码
public static function toTree($admin_menu, $menu_pid)
{
$tree = [];
foreach ($admin_menu as $k => $v) {
if ($v['menu_pid'] == $menu_pid) {
$childData = self::toTree($admin_menu, $v['admin_menu_id']);
if (count($childData) > 0) {
$v['children'] = self::toTree($admin_menu, $v['admin_menu_id']);
}
$tree[] = $v;
}
}
return $tree;
}
使用
$list = [];
$tree = self::toTree($list, 0);
return $tree;
小结
- 如果是处理较多的数据,大家可以使用缓存来配合开发。
- 菜单,地区,分类等都可以使用此方法。
|