用php写了一个查询数据库菜单列表的递归方法
php代码如下:
/**
* 查询菜单列表函数
* @return array
*/
public function findMenuList()
{
// 设置数据模式
DB::setFetchMode(\PDO::FETCH_ASSOC);
// 构造查询菜单列表函数findList()
function findList($id)
{
// 查询菜单列表
$menus = DB::table('menu')// 菜单表
->select('id', 'menu_name', 'menu_url', 'icon')// 查询菜单id、名称、URL及图标
->where('parent_id', '=', $id)
->orderBy('menu_order', 'asc')// 根据menu_order字段升序菜单
->get();
return $menus;
}
// 查询父菜单
$root_list = findList(0);// 菜单父菜单id常量,此处是0
// 定义获取子菜单函数
function getChild($item)
{
// 查询子菜单
$child_list = findList($item['id']);
// 遍历子菜单
for ($i = 0, $count = count($child_list);
$i < $count; $i++) {
$child_list[$i]['child_list'] = getChild($child_list[$i]);
}
return $child_list;
}
// 遍历父菜单
for ($i = 0, $count = count($root_list);
$i < $count; $i++) {
$root_list[$i]['child_list'] = getChild($root_list[$i]);
}
// 设置数据模式
DB::setFetchMode(\PDO::FETCH_CLASS);
return $root_list;
}