利用引用生成树状的菜单

在开始之前,先来了解一下什么是地址引用。

 

 php的引用,就是在变量、函数、对象等前面加上&符号,意思是使用不同的变量访问同一个变量内容。

下图来帮助大家理解下引用的作用

接下来进入正题

首先,创建数据

CREATE TABLE `menus` (
	`menu_id` INT(11) NOT NULL AUTO_INCREMENT,
	`title` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
	`parent_id` INT(11) NOT NULL DEFAULT '0',
	PRIMARY KEY (`menu_id`) USING BTREE
)
COMMENT='菜单'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=23
;

INSERT INTO `menus` (`menu_id`, `title`, `parent_id`) VALUES
	(1, '编程语言', 0),
	(2, '数据库', 0),
	(3, '前端', 1),
	(4, '后端', 1),
	(5, 'sql', 2),
	(6, 'nosql', 2),
	(7, 'js', 3),
	(8, 'css', 3),
	(9, 'html', 3),
	(10, 'vue', 3),
	(11, 'java', 4),
	(12, 'c++', 4),
	(13, 'php', 4),
	(14, 'go', 4),
	(15, 'mysql', 5),
	(16, 'oracle', 5),
	(17, 'sqlite', 5),
	(18, 'sqlserver', 5),
	(19, 'redis', 6),
	(20, 'mongodb', 6),
	(21, 'elasticsearch', 6);

其次,处理成树状结构的菜单

第一步,获取全部菜单

 # 全部数据
$menuList = \Database\MenuModel::query()->get()->toArray();

第二步,新建一个$tree,用来存储$menuList的每行数据的引用

$tree = [];
foreach ($menuList as $key => $value) {
    $tree[$value['menu_id']] = &$menuList[$key];
}

第三步,遍历$menuList,将每行数据放置到对应的父级菜单下

foreach ($menuList as $key => $value) {
    $parent = &$tree[$value['parent_id']];
    $parent['children'][] = &$menuList[$key];
}

到此为止,$menuList 里面的每行数据,都包含了其下面所有的子菜单

 第四步,获取指定级别的菜单

$parentId = 0;
$return = [];
foreach ($menuList as $key => $value) {
    if($value['parent_id'] == $parentId) {
        array_push($return, $value);
    }
}

$parentId = 0 表示获取顶级菜单及其树状的子菜单

最终结果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值