PHP树形结构数据增加每层的级别
- 一、描述
- 二、代码
- 1、先转成树形结构,再追加等级字段level到树形结构数据
- 2、直接转换成树形结构并加上等级字段level
- 三、部分结果截图
一、描述
给树形结构数据加上层级字段
level
,pid = 0
的数据为1
级,children
里的数据依递增 1
二、代码
1、先转成树形结构,再追加等级字段level到树形结构数据
- PHP树形结构数据处理成面包屑结构
- 代码
public function test() {//定义需要处理的数据$data = [[ 'id' => 1, 'pid' => 0, 'name' => '手机' ],[ 'id' => 2, 'pid' => 1, 'name' => 'A手机' ],[ 'id' => 3, 'pid' => 2, 'name' => 'A手机充电器' ],[ 'id' => 4, 'pid' => 2, 'name' => 'A手机耳机' ],[ 'id' => 5, 'pid' => 1, 'name' => 'B手机' ],[ 'id' => 6, 'pid' => 5, 'name' => 'B手机充电器' ],[ 'id' => 7, 'pid' => 5, 'name' => 'B手机耳机' ],[ 'id' => 8, 'pid' => 7, 'name' => '左耳机' ],[ 'id' => 9, 'pid' => 7, 'name' => '右耳机' ],['id' => 10, 'pid' => 0, 'name' => '手机C']];$treeData = self::generateTree($data); //处理成数据结构数据$this->addGenLevel($treeData); //把树形结果数据处理成最终数据var_export($treeData);die;
}/*** 处理成树形结构数据* @param $list* @param string $pk* @param string $pid* @param string $child* @param int $root* @return array*/
function generateTree($list, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0)
{$tree = array();$packData = array();foreach ($list as $data) {$packData[$data[$pk]] = $data;}foreach ($packData as $key => $val) {if ($val[$pid] == $root) {$tree[] = &$packData[$key]; //代表根节点, 重点一} else {$packData[$val[$pid]][$child][] = &$packData[$key]; //找到其父类,重点二}}return $tree;
}/*** 给树形结构数据计算层级字段 Level* @param $list* @param int $level 数据当前层级*/
public function addGenLevel(&$list, $level = 0) {$level = $level + 1;foreach ($list as &$value) {if (!empty($value['children'])) {$this->addGenLevel($value['children'], $level);}$value['level'] = $level;}
}
2、直接转换成树形结构并加上等级字段level
- php树形结构并增加每层的级别
- 代码
public function test() {//定义需要处理的数据$data = [[ 'id' => 1, 'pid' => 0, 'name' => '手机' ],[ 'id' => 2, 'pid' => 1, 'name' => 'A手机' ],[ 'id' => 3, 'pid' => 2, 'name' => 'A手机充电器' ],[ 'id' => 4, 'pid' => 2, 'name' => 'A手机耳机' ],[ 'id' => 5, 'pid' => 1, 'name' => 'B手机' ],[ 'id' => 6, 'pid' => 5, 'name' => 'B手机充电器' ],[ 'id' => 7, 'pid' => 5, 'name' => 'B手机耳机' ],[ 'id' => 8, 'pid' => 7, 'name' => '左耳机' ],[ 'id' => 9, 'pid' => 7, 'name' => '右耳机' ],['id' => 10, 'pid' => 0, 'name' => '手机C']];$treeData = self::getTree($data); //处理成数据结构数据var_export($treeData);die;
}public function getTree($data, $child = 'children', $pid = 0, $level = 0) {$tree = array();$level = $level + 1;foreach($data as $k => $v) {if($v['pid'] == $pid) { // 父亲找到儿子$children = $this->getTree($data, $child, $v['id'], $level);if ($children) { //children存在才追加$v[$child] = $children;}$v['level'] = $level;$tree[] = $v;//unset($data[$k]);}}return $tree;
}
三、部分结果截图
PHP树形结构数据增加每层的级别相关推荐
- Java 递归查询部门树形结构数据
说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1.数据库表:department 2.编写sql映射语句 <select id=&quo ...
- js 处理树形结构数据
js 处理树形结构数据 数据 let data = [{ id: 1, address: '安徽', parent_id: 0 },{ id: 2, address: '江苏', parent_id: ...
- 前端JSES6对树形结构数据遍历处理为自己想要的结果
遍历树形结构数据,加入或处理需要的键值 data: 需要被处理的数据 level: 树形结构需要被遍历到第几层 注意!!!i和str不是必填项,这是我的业务需求要判断数循环到了第几层,和拼接层级名称 ...
- Java 树形结构数据生成--不需要顶级节点
概要 树形结构数据是后台开发中非常常见的一种数据结构.后台管理系统中必要的一种结构,常见的树形结构数据有,部门树,权限树等等,利用该数据结构可以让你的系统数据展示一目了然,并且为分配这些数据也提供了极 ...
- 【自定义注解使用】增加service层方法访问日志
目录 背景 自定义注解 动态代理/AOP 使用 总结 本文涉及到的技术有:SLF4J,JDK动态代理,AspectJ,Java自定义注解,Java反射. 背景 最近工作中发现为了方便排查服务器日志,公 ...
- php 处理树形数据,php实现的树形结构数据存取类实例
php实现的树形结构数据存取类实例 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: php实现的树形结构数据存取类实例.txt ] (友情提示:右键点上行txt文档 ...
- 构建树形结构数据(全部构建,查找构建)C#版
摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...
- web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开 <style type="text/css"> * {margin: 0;padding: 0; }a {te ...
- Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)
前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...
- 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点
树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...
最新文章
- java工程师的工作时间_Java 工程师真的每天只需工作四小时吗?
- Mysql Federated Server 示例
- SharePoint:扩展DVWP - 第21部分:实现可维护的三级联动下拉框
- HMTL/CSS——下拉菜单DEMO
- Redis给PHP安装redis扩展
- cocos2dx迷你地图
- C语言八字图标软件,ico图标编辑器(Greenfish Icon Editor)
- Vue源码阅读一:说说vue.nextTick实现
- 进程和cpu的相关知识和简单调优方案
- java outputstrea_java的InputStream和OutputStream的理解【转】
- Win10 安装IE11失败错误代码0x80070490(未解决)
- 【TBSchedule】TBSchedule应用实战手册
- 电源输出端串入IN4007,测量正负电压,压降只有0.3v,为什么不是0.7v左右呢?
- html progress改变样式,自定义html中Progress的样式
- echarts修改数据视图格式
- 一个后端开发的 Vue 笔记【入门级】
- 利用MATLAB模拟排队论
- DBA所需要具备技能
- 学情分析场景解读,助力教育机构提升课程质量和学员学习效果
- 卜若的代码笔记-matlab系列-matlab基础教程-第二章:静态变量
热门文章
- 二叉树的层序遍历_二叉树:你真的会翻转二叉树么?
- 1.5.1 Number Triangles 数字金字塔
- sklearn 中GBDT的损失函数
- python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
- SLAM学习笔记-------------(七)视觉里程计
- active mq topic消费后删除_天天在用消息队列,却不知道为啥要用 MQ ,这就尴尬了...
- anaconda必须安装在c盘吗_Anaconda及tensorflow、pytorch安装记
- docker 发布springBoot项目
- docker elasticsearch安装
- C语言 16进制转float