PHP树-不需要递归的实现方法

/**

* 创建父节点树形数组

* 参数

* $ar 数组,邻接列表方式组织的数据

* $id 数组中作为主键的下标或关联键名

* $pid 数组中作为父键的下标或关联键名

* 返回 多维数组

**/

function find_parent($ar, $id='id', $pid='pid') {

foreach($ar as $v) $t[$v[$id]] = $v;

foreach ($t as $k => $item){

if( $item[$pid] ){

if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )

$t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];

}

}

return $t;

}

/**

* 创建子节点树形数组

* 参数

* $ar 数组,邻接列表方式组织的数据

* $id 数组中作为主键的下标或关联键名

* $pid 数组中作为父键的下标或关联键名

* 返回 多维数组

**/

function find_child($ar, $id='id', $pid='pid') {

foreach($ar as $v) $t[$v[$id]] = $v;

foreach ($t as $k => $item){

if( $item[$pid] ) {

$t[$item[$pid]]['child'][$item[$id]] =& $t[$k];

}

}

return $t;

}

$data = array(

array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),

array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),

array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),

array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),

array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),

);

$p = find_parent($data, 'ID', 'PARENT');

$c = find_child($data, 'ID', 'PARENT');

Print_r ($c);

执行效果:

Array

(

[1] => Array

(

[ID] => 1

[PARENT] => 0

[NAME] => 祖父

[child] => Array

(

[2] => Array

(

[ID] => 2

[PARENT] => 1

[NAME] => 父亲

[child] => Array

(

[4] => Array

(

[ID] => 4

[PARENT] => 2

[NAME] => 自己

[child] => Array

(

[5] => Array

(

[ID] => 5

[PARENT] => 4

[NAME] => 儿子

)

)

)

)

)

[3] => Array

(

[ID] => 3

[PARENT] => 1

[NAME] => 叔伯

)

)

)

[2] => Array

(

[ID] => 2

[PARENT] => 1

[NAME] => 父亲

[child] => Array

(

[4] => Array

(

[ID] => 4

[PARENT] => 2

[NAME] => 自己

[child] => Array

(

[5] => Array

(

[ID] => 5

[PARENT] => 4

[NAME] => 儿子

)

)

)

)

)

[3] => Array

(

[ID] => 3

[PARENT] => 1

[NAME] => 叔伯

)

[4] => Array

(

[ID] => 4

[PARENT] => 2

[NAME] => 自己

[child] => Array

(

[5] => Array

(

[ID] => 5

[PARENT] => 4

[NAME] => 儿子

)

)

)

[5] => Array

(

[ID] => 5

[PARENT] => 4

[NAME] => 儿子

)

)

以上这篇PHP树-不需要递归的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

php 自动寻路算法,PHP树-不需要递归的实现方法相关推荐

  1. js递归遍历json树_2020-08-26:裸写算法:树的非递归先序遍历

    福哥答案2020-08-26: 方法 1:迭代 算法 从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右孩子再压左孩子. 在这个算法中,输出到最终结果的顺序按照 Top->B ...

  2. 算法学习笔记16:递归树

    递归树:如何借助树来求解递归算法的时间复杂度 今天,我们来讲这种数据结构的一种特殊应用,递归树. 我们都知道,递归代码的时间复杂度分析起来很麻烦.我们在<排序>那里讲过,如何利用递推公式, ...

  3. 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较

    在学习算法的过程中,递归.分治.动态规划.贪心.回溯.分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之处的,我来给同学们整理一下. 一.算法思想 ...

  4. k近邻算法——kd树

    一.kd树概念   kd树(K-Dimensional Tree)是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构.   kd树是二叉树,表示对K维空间的一个划分(partitio ...

  5. 《数据结构与算法》——树与二叉树之遍历总结

    <数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...

  6. c语言线段树建树程序,C++算法 线段树

    线段树这个算法,看起来非常高端,而且很有用处,所以还是讲一下下吧. 温馨提示:写线段树前请做好写码5分钟,调试一辈子的准备^-^ 啊直接步入正题-- 首先我们考虑一个题目:有一个序列,要做到单点修改单 ...

  7. 数据结构与算法图解——树

    文章目录 7. 树 7.1 树的逻辑结构 7.1.1 例题 7.2 树的基本术语 7.2.1 例题 7.3 二叉树的性质 7.3.1 性质1 7.3.2 性质2 7.3.3 性质3 7.3.4 性质4 ...

  8. 分治算法中的数学——求解递归式(代入法)

    前言 在运用分治法将原问题分解成多个子问题后,通常可以得到一个关于时间复杂度的递归式,如T(n)=T(n/2)+O(1),如何求解递归式并得出该算法的时间复杂度O(f(n))就是我们要解决的问题.一般 ...

  9. python自动寻路算法_PHP生成迷宫及自动寻路算法详解

    如何使用PHP生成迷宫以及寻路求解?本文主要介绍了PHP生成迷宫及自动寻路算法,并对PHP生成迷宫及自动寻路算法详解.希望对大家有所帮助. 本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法. ...

最新文章

  1. 为什么toString()方法会自动被调用
  2. android tv 悬浮窗口,android TV的自定义关机弹出框
  3. 关于去中心化身份的一点思考
  4. PHP-FPM对比Swoole:Swoole多了Reactor线程监听Socket 句柄的变化 代码初始化一次不结束进程 ws tcp mqtt服务
  5. Object-c 类、对象方法
  6. latex 多行公式_Markdown中输入多行并列的公式
  7. 阿里云熊鹰:基于融合、协同系统的边缘云原生架构演进和实践
  8. C# Types Type Members
  9. python如何画出多个独立的图使用turtle_从选项列表一次绘制多个形状(Python-Turtle图形)?...
  10. maven添加sqlserver的jdbc驱动包
  11. 20150310-删除数组中原有对象
  12. 一款 macOS 全能效率神器
  13. c#无标题窗口的拖动
  14. 嗯....零乱知识点map和字符串转换的
  15. 计算机上睡眠和休眠区别,计算机睡眠和休眠的区别
  16. Product Requirement Document
  17. 遗传算法 神经网络 深度学习 概率论 模糊数学 之间有什么区别?
  18. XYplorer设置
  19. Android系统换字体不root,小编吐血整理,超实用免ROOT 安卓手机换字体软件
  20. Elastic 7.14.0 版推出业界首个免费开放的 Limitless XDR

热门文章

  1. 在JupyterNotebook中使用多个Python环境
  2. Hive记录-Impala jdbc连接hive和kudu参考
  3. 如何通过TortoiseGit(小乌龟)把本地项目上传到github上
  4. 20165322 第二周结队编程-四则运算
  5. Java运行时的数据区域
  6. linux 安装jdk tomcat mysql
  7. 转转转!java继承中的this和super
  8. 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)
  9. php 二维数组按照某value值求出最大值最小值
  10. 微软超级麻将AI Suphx论文发布,研发团队深度揭秘技术细节