php 自动寻路算法,PHP树-不需要递归的实现方法
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树-不需要递归的实现方法相关推荐
- js递归遍历json树_2020-08-26:裸写算法:树的非递归先序遍历
福哥答案2020-08-26: 方法 1:迭代 算法 从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右孩子再压左孩子. 在这个算法中,输出到最终结果的顺序按照 Top->B ...
- 算法学习笔记16:递归树
递归树:如何借助树来求解递归算法的时间复杂度 今天,我们来讲这种数据结构的一种特殊应用,递归树. 我们都知道,递归代码的时间复杂度分析起来很麻烦.我们在<排序>那里讲过,如何利用递推公式, ...
- 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较
在学习算法的过程中,递归.分治.动态规划.贪心.回溯.分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之处的,我来给同学们整理一下. 一.算法思想 ...
- k近邻算法——kd树
一.kd树概念 kd树(K-Dimensional Tree)是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构. kd树是二叉树,表示对K维空间的一个划分(partitio ...
- 《数据结构与算法》——树与二叉树之遍历总结
<数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...
- c语言线段树建树程序,C++算法 线段树
线段树这个算法,看起来非常高端,而且很有用处,所以还是讲一下下吧. 温馨提示:写线段树前请做好写码5分钟,调试一辈子的准备^-^ 啊直接步入正题-- 首先我们考虑一个题目:有一个序列,要做到单点修改单 ...
- 数据结构与算法图解——树
文章目录 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 ...
- 分治算法中的数学——求解递归式(代入法)
前言 在运用分治法将原问题分解成多个子问题后,通常可以得到一个关于时间复杂度的递归式,如T(n)=T(n/2)+O(1),如何求解递归式并得出该算法的时间复杂度O(f(n))就是我们要解决的问题.一般 ...
- python自动寻路算法_PHP生成迷宫及自动寻路算法详解
如何使用PHP生成迷宫以及寻路求解?本文主要介绍了PHP生成迷宫及自动寻路算法,并对PHP生成迷宫及自动寻路算法详解.希望对大家有所帮助. 本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法. ...
最新文章
- 为什么toString()方法会自动被调用
- android tv 悬浮窗口,android TV的自定义关机弹出框
- 关于去中心化身份的一点思考
- PHP-FPM对比Swoole:Swoole多了Reactor线程监听Socket 句柄的变化 代码初始化一次不结束进程 ws tcp mqtt服务
- Object-c 类、对象方法
- latex 多行公式_Markdown中输入多行并列的公式
- 阿里云熊鹰:基于融合、协同系统的边缘云原生架构演进和实践
- C# Types Type Members
- python如何画出多个独立的图使用turtle_从选项列表一次绘制多个形状(Python-Turtle图形)?...
- maven添加sqlserver的jdbc驱动包
- 20150310-删除数组中原有对象
- 一款 macOS 全能效率神器
- c#无标题窗口的拖动
- 嗯....零乱知识点map和字符串转换的
- 计算机上睡眠和休眠区别,计算机睡眠和休眠的区别
- Product Requirement Document
- 遗传算法 神经网络 深度学习 概率论 模糊数学 之间有什么区别?
- XYplorer设置
- Android系统换字体不root,小编吐血整理,超实用免ROOT 安卓手机换字体软件
- Elastic 7.14.0 版推出业界首个免费开放的 Limitless XDR