• 一、描述
  • 二、代码
    • 1、先转成树形结构,再追加等级字段level到树形结构数据
    • 2、直接转换成树形结构并加上等级字段level
  • 三、部分结果截图

一、描述

给树形结构数据加上层级字段levelpid = 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树形结构数据增加每层的级别相关推荐

  1. Java 递归查询部门树形结构数据

    说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1.数据库表:department 2.编写sql映射语句 <select id=&quo ...

  2. js 处理树形结构数据

    js 处理树形结构数据 数据 let data = [{ id: 1, address: '安徽', parent_id: 0 },{ id: 2, address: '江苏', parent_id: ...

  3. 前端JSES6对树形结构数据遍历处理为自己想要的结果

    遍历树形结构数据,加入或处理需要的键值 data: 需要被处理的数据 level: 树形结构需要被遍历到第几层 注意!!!i和str不是必填项,这是我的业务需求要判断数循环到了第几层,和拼接层级名称 ...

  4. Java 树形结构数据生成--不需要顶级节点

    概要 树形结构数据是后台开发中非常常见的一种数据结构.后台管理系统中必要的一种结构,常见的树形结构数据有,部门树,权限树等等,利用该数据结构可以让你的系统数据展示一目了然,并且为分配这些数据也提供了极 ...

  5. 【自定义注解使用】增加service层方法访问日志

    目录 背景 自定义注解 动态代理/AOP 使用 总结 本文涉及到的技术有:SLF4J,JDK动态代理,AspectJ,Java自定义注解,Java反射. 背景 最近工作中发现为了方便排查服务器日志,公 ...

  6. php 处理树形数据,php实现的树形结构数据存取类实例

    php实现的树形结构数据存取类实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  php实现的树形结构数据存取类实例.txt ] (友情提示:右键点上行txt文档 ...

  7. 构建树形结构数据(全部构建,查找构建)C#版

    摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...

  8. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开 <style type="text/css"> * {margin: 0;padding: 0; }a {te ...

  9. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)

    前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...

  10. 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点

    树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...

最新文章

  1. java工程师的工作时间_Java 工程师真的每天只需工作四小时吗?
  2. Mysql Federated Server 示例
  3. SharePoint:扩展DVWP - 第21部分:实现可维护的三级联动下拉框
  4. HMTL/CSS——下拉菜单DEMO
  5. Redis给PHP安装redis扩展
  6. cocos2dx迷你地图
  7. C语言八字图标软件,ico图标编辑器(Greenfish Icon Editor)
  8. Vue源码阅读一:说说vue.nextTick实现
  9. 进程和cpu的相关知识和简单调优方案
  10. java outputstrea_java的InputStream和OutputStream的理解【转】
  11. Win10 安装IE11失败错误代码0x80070490(未解决)
  12. 【TBSchedule】TBSchedule应用实战手册
  13. 电源输出端串入IN4007,测量正负电压,压降只有0.3v,为什么不是0.7v左右呢?
  14. html progress改变样式,自定义html中Progress的样式
  15. echarts修改数据视图格式
  16. 一个后端开发的 Vue 笔记【入门级】
  17. 利用MATLAB模拟排队论
  18. DBA所需要具备技能
  19. 学情分析场景解读,助力教育机构提升课程质量和学员学习效果
  20. 卜若的代码笔记-matlab系列-matlab基础教程-第二章:静态变量

热门文章

  1. 二叉树的层序遍历_二叉树:你真的会翻转二叉树么?
  2. 1.5.1 Number Triangles 数字金字塔
  3. sklearn 中GBDT的损失函数
  4. python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
  5. SLAM学习笔记-------------(七)视觉里程计
  6. active mq topic消费后删除_天天在用消息队列,却不知道为啥要用 MQ ,这就尴尬了...
  7. anaconda必须安装在c盘吗_Anaconda及tensorflow、pytorch安装记
  8. docker 发布springBoot项目
  9. docker elasticsearch安装
  10. C语言 16进制转float