首页 > 编程语言 >PHP多层级菜单树形结构递归处理

PHP多层级菜单树形结构递归处理

时间:2023-09-21 10:57:08浏览次数:42  
标签:层级 level 08 树形 user PHP data id

如题:

一、数据库菜单数据表

使用图片中id和parent_id两个参数来关联父子关系

image

二、将数据库中的数据变成树状多层级解构

```
{
	"id": 1,
	"parentId": 0,
	"treePath": "0",
	"name": "系统管理",
	"type": 2,
	"path": "/system",
	"component": "Layout",
	"perm": null,
	"visible": 1,
	"sort": 1,
	"icon": "system",
	"redirect": "/system/user",
	"createTime": "2021-08-28 09:12:21",
	"updateTime": "2021-08-28 09:12:21",
	"level": 0,
	"children": [
		{
			"id": 2,
			"parentId": 1,
			"treePath": "0,1",
			"name": "用户管理",
			"type": 1,
			"path": "user",
			"component": "system/user/index",
			"perm": null,
			"visible": 1,
			"sort": 1,
			"icon": "user",
			"redirect": null,
			"createTime": "2021-08-28 09:12:21",
			"updateTime": "2021-08-28 09:12:21",
			"level": 1,
			"children": [
				{
					"id": 31,
					"parentId": 2,
					"treePath": "0,1,2",
					"name": "用户新增",
					"type": 4,
					"path": "",
					"component": null,
					"perm": "sys:user:add",
					"visible": 1,
					"sort": 1,
					"icon": "",
					"redirect": "",
					"createTime": "2022-10-23 11:04:08",
					"updateTime": "2022-10-23 11:04:11",
					"level": 2
				},
				...
				// 多层级省略
			]
		},
		...
		// 多层级省略
    ]
},
...
// 多层级省略
```

三、实现方法

```
	// 1、先获取数据
	$model = new SysMenu();
	$data = $model->getDbAll();
	
	// 2、重点: 组装菜单menus,可将该方法提取出来
	function filterMenus($data, $pid = 0, $level = 0)
	{
		// $level 是可选
		$tree = [];
		foreach($data as $k => $v) {
			if ($v['parent_id'] === $pid) {
				$v['level'] = $level;
				$child = filterMenus($data, $v['id'], $level+1);
				if (!empty($child)) {
					// 自定义children字段,存放子数据
					$v['children'] = $child;
				}
				// 将$v push到$tree中,多维数组
				$tree[] = $v;
			}
		}
		return $tree;
	}
	
	// 3、调用函数
	$menus = filterMenus($data, 0);
	
	// 4、打印结果
	var_dump($menus);die;
```

以上即可完成菜单转化,重点是数据表中两个关联字段id、parent_id和递归函数;

标签:层级,level,08,树形,user,PHP,data,id
From: https://www.cnblogs.com/cp-cookie/p/17719342.html

相关文章

  • 【漏洞复现】深信服 SG上网优化管理系统 catjs.php 任意文件读取漏洞
    1、简介2、漏洞描述深信服SG上网优化管理系统catjs.php存在任意文件读取漏洞,攻击者通过漏洞可以获取服务器上的敏感文件3、受影响版本深信服SG上网优化管理系统4、FOFA语句title==“SANGFOR上网优化管理”5、漏洞复现POCPOST/php/catjs.phpHTTP/1.1Host:User-A......
  • php实现大文件断点续传下载实例
    php实现大文件断点续传下载实例,看完你就知道超过100M以上的大文件如何断点传输了,这个功能还是比较经典实用的,毕竟大文件上传功能经常用得到。1require_once('download.class.php');2date_default_timezone_set('Asia/Shanghai');3error_reporting(E_STRICT);4......
  • phpstudy无法启动mysql(启动之后立马关闭)
    好久没有打开本地环境,直到昨天打开phpstudy,正常启动,但是在任务管理器中发现没有mysql服务于是在mysql的bin目录下执行.\mysqld.exe--install  mysql服务是有了,但这个问题就来了重启phpstudy无法启动mysql注意:在此之前注意备份mysql数据,查看现在设置的mysql密码,以便本地项......
  • JS 构造树形
    一、背景List组装树形Tree二、实现点击查看代码listRolePurifySmalls().then(data=>{constlist=data||[]constmap={}list.forEach(item=>{letsmalls=map[item.divisionName]if(!smalls){smalls=[]......
  • JS 将列表转成树形结构数据
    一、背景联调发现有些后端返回List但是前后需要转树形结构二、实现点击查看代码import_,{isArray}from'lodash'/***将列表转成树形结构数据*@paramnodes列表数据*@paramoptions可选参数,{idKey,pIdKey,childrenKey}*@returns{[]}树形结构数据......
  • yourls安装-报错AbstractExtendedPdo.php
    1`Fatalerror:UncaughtPDOException:SQLSTATE[HY000]:Generalerror:3Errorwritingfile'./example_com/yourls_url.frm'(Errcode:28)in/www/wwwroot/example.com/includes/vendor/aura/sql/src/AbstractExtendedPdo.php:565Stacktrace:#0/www/w......
  • PHP如何上传超大文件
    前言最近在开发一个视频播放网站,用的是PHP技术。视频播放网站用户上传的都是视频资料,小的有几十M,大的都超过G了,对于这种超大文件的上传,我们不能用常规的上传方式,必须对大文件进行分块上传,否则一方面会造成服务器内存爆满,另一方如果上传的文件太大也很容造成上传超时的情况发生。......
  • 整理php防注入和XSS攻击通用过滤
    对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlspecialchars,strip_tags这些函数都使用上了也不一定能保证绝对的安全。那么如何预防XSS注入?主要还是需要在用户数据过滤方面得考虑......
  • Strategic game POJ - 1463 树的最小点覆盖,树形dp
    题意:树的最小点覆盖,选择最少的点覆盖所有边。分析:状态:f[u][0/1]表示不选/选编号u的点的最优解转移:不选u,则一定选u的儿子v,即f[u][0]+=f[v][1]选u,则可以选,也可以不选u的儿子v,即f[u][1]+=min(f[v][0],f[v][1]);目标:ans=min(f[rt][0],f[rt][1]);点击查看代码#inc......
  • vue项目-封装树形控件公用组件
    vue项目中,如h5端,第三方的树形选择器无法满足项目开发时,原生封装tree控件,通过判断是否存在子节点,循环递归组件完成树形封装,通过vue指令实现跨级传递数据或方法封装树形组件如下:1<template>2<divclass="tree-select-page">3<divclass="tree-item"v-for="item......