php菜单树形处理

前言

咱们在开发的过程当中,一定会遇到需要将一组数据处理为树形结构返回给前端,或者是需要这样的树形结构。

需要处理的数据结构

[
    {
        "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
            }
        ]
    }
]

代码实现

主要代码

/**
 * 菜单树形获取
 * @param array   $admin_menu 所有菜单
 * @param integer $menu_pid   菜单父级id
 * @return array
 */
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']);
            // 这里根据前端,以及业务的需要来处理,加上这个判断,如果该菜单没有下级,就没有chlidren字段,不加判断,则返回[]
            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;

小结

  • 如果是处理较多的数据,大家可以使用缓存来配合开发。
  • 菜单,地区,分类等都可以使用此方法。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故蓝寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值