算法特点:利用b+树概念,只用一次循环就可生成树形数组

//测试数据 $ar = array( array(id=>1,pid=>0), array(id=>2,pid=>0), array(id=>3,pid=>2), array(id=>4,pid=>0), array(id=>5,pid=>3), array(id=>6,pid=>1), array(id=>7,pid=>1), array(id=>8,pid=>6), array(id=>9,pid=>7), array(id=>10,pid=>9) ); //排序函数 function cmd($a,$b) { if($a[pid]==$b[pid]) return 0; return $a[pid]>$b[pid]?1:-1; } //排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的 //排序的目的就是防止这种情况造成的混乱 uasort($ar,cmd); //定义目标数组 $d = array(); //定义索引数组,用于记录节点在目标数组的位置 $ind = array(); foreach($ar as $v) { $v[child] = array(); //给每个节点附加一个child项 if($v[pid] == 0) { $i = count($d); $d[$i] = $v; $ind[$v[id]] =& $d[$i]; }else { $i = count($ind[$v[pid]][child]); $ind[$v[pid]][child][$i] = $v; $ind[$v[id]] =& $ind[$v[pid]][child][$i]; } } //检查结果 print_r($d); ?>

php b+树,PHP利用b+树概念实现树形数组相关推荐

  1. 【数据结构】 树与二叉树的基本概念、结构特点及性质

    前言:本章内容主要是数据结构中树与二叉树的基本概念.结构特点及性质的引入. 文章目录 树的概念 树的特点: 树的常用术语: 树的表示: 代码创建: 树在实际中的应用: 二叉树的概念 特殊的二叉树 满二 ...

  2. 树和二叉树的基本概念(二级)

    我们来看数据结构的另外一块内容,树和二叉树,这是我们数据结构的一个重点,尤其是二叉树来说,树是一个重点,我们主要是研究二叉树,先看一下树的基本概念,然后我们再看一下二叉树的基本知识,这两部分讲完之后呢 ...

  3. 树和二叉树的基本概念及性质

    目录 一.树概念及性质 1.树的概念 2.树的部分性质 3.树的表示 二. 二叉树概念及结构 1.概念 2.特殊的二叉树: 1.满二叉树 2.完全二叉树 3.二叉树的性质 4.堆的概念及结构 一.树概 ...

  4. 树和二叉树的基本概念和相关计算

    1.高度为h的m叉树的最多有多少个结点? 在上面的计算方法中,如果要想高度为h的m叉树的结点最多,只有当m叉树是满的情况,即所有的结点都有m个孩子!此时m叉树必然有最多的结点!(可以理解为满m叉树,满 ...

  5. 利用kd树进行平面内最近点搜索

    要求: 对平面内每一个点都找到离它最近的点.通常想法是knn,那么由于是对n个点求,直接算的话就是n平方. 我们利用kd树来搜索,那么复杂度就变为了nlogn,甚至说由于a与b距离最小等价于b与a最小 ...

  6. 【设备树使用】-- 1 基础概念

    本页介绍了如何为新机器编写设备树. 它旨在提供设备树概念的概述以及它们如何用于描述机器. 有关设备树数据格式的完整技术说明,请参阅ePAPR v1.1规范. ePAPR规范涵盖了比本页面涵盖的基本主题 ...

  7. React:DOM树与虚拟DOM树(概念与区别)

    React:DOM树与虚拟DOM树(概念与区别) DOM的本质: 浏览器中的概念,用JS对象来表示页面上的元素,并提供了操作DOM对象的API: React中的虚拟DOM: 是框架中的概念,是程序员 ...

  8. 利用Huffman树进行文本编码解码的实现

    --------------------------------- 功能:利用Huffman树进行文本编码解码的实现 环境:WinXP,VC6.0 输入:C:\\in.txt 输出:C:\\out.d ...

  9. 【数据结构Python描述】树的简介、基本概念和手动实现一个二叉树

    文章目录 一.树的简介 1. 树的定义 2. 相关概念 二.树的ADT 三.树的实现准备 1. 树的基本分类 2. 树的抽象基类 四.树的概念拾遗 1. 深度 2. 高度 五.二叉树的简介 1. 定义 ...

最新文章

  1. python详细教程-python入门(非常详细的教程)
  2. Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略
  3. DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
  4. 伪元素::before与::after的用法
  5. DefaultListableBeanFactory 对配置lazy-init 属性单态Bean 的预实例化
  6. fs7宽容度_《如果蜗牛有爱情》,FS7拍出电影级质感!
  7. 非一致性访存系统_Hibernate事实:访存策略的重要性
  8. html、css、js、react、vue 文字一行一行显示出来
  9. 还在用ViT的16x16 Patch分割方法吗?中科院自动化所提出Deformable Patch-based方法,涨点显著!...
  10. (六)使用ResNet50迁移学习进行COVID-19诊断:从头开始构建深度学习网络
  11. [原创]物探小宽线坐标快速生成(平行线坐标互算 、点到线距离计算、两线交点计算等)...
  12. Spring AOP原理分析(一)-- AOP相关概念
  13. 三目运算(三目表达式)是什么?
  14. Git详细教程(三):window系统下,使用Git Gui管理项目
  15. ABAQUS内核及GUI方法的代理接口
  16. linux中的__setup的作用
  17. Google Chrome常用插件推荐
  18. 浙江理工大学计算机考研资料汇总
  19. c# wifi串口通信_C#中的串口通信
  20. 《Java 8实战》

热门文章

  1. 从资深遥控器在家工作的5个技巧
  2. cassandra 数据库_使用Apache Cassandra构建分布式NoSQL数据库
  3. 打开Morrowind版本,Vector 36在Linux上的本机版本以及Hyper Light Drifter
  4. 公众号精选评论点赞_12月评论:前10名和编辑精选
  5. es6 Generator函数的this
  6. linux java services_在Linux上将Java应用程序作为服务运行
  7. Python的解释器和字节码
  8. 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义、指数和对数映射
  9. 医学专用计算机证,问一下,医学生考计算机2级证和心理咨询师证有用吗
  10. ext store 数据修改_Vue 组件数据通信方案总结