php子孙树,递归 迭代 得到家谱树 子孙树
$arr=array(
array('id'=>'1','name'=>'吉林','parent'=>0),
array('id'=>'2','name'=>'北京','parent'=>0),
array('id'=>'3','name'=>'辽宁','parent'=>0),
array('id'=>'4','name'=>'吉林市','parent'=>1),
array('id'=>'5','name'=>'长春','parent'=>1),
array('id'=>'6','name'=>'海淀','parent'=>2),
array('id'=>'7','name'=>'大连','parent'=>3),
array('id'=>'8','name'=>'船营区','parent'=>4),
array('id'=>'9','name'=>'丰满区','parent'=>4)
);
//找子栏目
function findson($arr,$id=0){
$sons=array();
foreach($arr as $v){
if($v['parent']==$id){
$sons[]=$v;
}
}
return $sons;
}
//var_dump(findson($arr,$id=1));
//找子孙树
//用静态变量
function subtree($arr,$id,$lev=1){
static $subs=array(); //static 只初始化一次
foreach($arr as $v){
if($v['parent']==$id){
$v['lev']=$lev;
$subs[]=$v;
subtree($arr,$v['id'],$lev+1);
//不用静态变量
// $subs=array_merge($subs,subtree($arr,$v['id'],$lev+1));
}
}
return $subs;
}
/*
$tree=subtree($arr,$id=0,1);
foreach ($tree as $v){
echo str_repeat(' ',$v['lev']).$v['name']."
";
}
*/
/**
家谱树应用
面包屑导航
首页>手机类型>诺基亚>
**/
function familytree($area,$id){
static $tree=array();
foreach($area as $v){
if($v['id']==$id){
$tree[]=$v;
//判断要不要继续找父栏目
if($v['parent']>0){
familytree($area,$v['parent']);
//不用static
//array_merge($area,familytree($area,$v['parent']));
}
}
}
return $tree;
}
echo "
";
//print_r(familytree($arr,9));
/*用迭代找家谱树(推荐)*/
function familytree2($arr,$id){
$tree=array();
while($id!==0){
foreach($arr as $v){
if($v['id']==$id){
$tree[]=$v;
$id=$v['parent'];
break;
}
}
}
return $tree;
}
print_r(familytree2($arr,9));
?>
php子孙树,递归 迭代 得到家谱树 子孙树相关推荐
- python嵌套列表法实现树_在python中创建递归迭代嵌套列表的“数据树”路径
我正在尝试创建一个"路径"列表,该列表中的每个项目都有.例如输入列表:_list = [[x,x,x], [[x,x,x],[x,x,x]], [x,x,x]] 期望输出: ^{p ...
- 【IOI2018】会议【笛卡尔树】【dp】【线段树】
题意:长度为nnn的序列,qqq次询问,每次给定一个区间,钦定区间中的一个位置xxx,使得区间所有点 与xxx之间的最大值(含端点) 之和 最小,输出最小值. n,q≤7.5×105n,q\leq7. ...
- Php数组面包屑导航,php可应用于面包屑导航的迭代寻找家谱树实现方法
php是通过定义类来实现迭代器接口来构造迭代器,通过yield构造迭代器可以提高性能并节省系统开销,下面就跟着爱站技术频道小编的步伐来学习php可应用于面包屑导航的迭代寻找家谱树实现方法吧. 具体实现 ...
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
- python卡方检验筛选特征原理_基于Python的遥感特征筛选—递归特征消除(RFE)与极限树(Extra-Trees)...
引言 基于前几篇文章关于筛选方法的介绍,本篇同样给大家介绍两种python封装的经典特征降维方法,递归特征消除(RFE)与极限树(Extra-Trees, ET).其中,RFE整合了两种不同的超参数, ...
- 线段树递归和非递归实现+hdu1166 敌兵布阵
递归代码: #include <string> #include <cstring> #include <iostream> #include <stdio. ...
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- js递归遍历json树_2020-08-26:裸写算法:树的非递归先序遍历
福哥答案2020-08-26: 方法 1:迭代 算法 从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右孩子再压左孩子. 在这个算法中,输出到最终结果的顺序按照 Top->B ...
- python递归查找值返回_python – 从树递归中返回值列表
我正在尝试自学数据结构,我正在用 Python实现一个k-d树.我有一种方法在我的k-d树类中的一个点的某个半径内搜索树中的点: def within_radius(self, point, radi ...
最新文章
- java实现随机字母数字验证码
- 斯坦福CS229机器学习课程的数学基础(概率论)翻译完成
- 胡珀:从危到机,AI 时代下的安全挑战
- PHP 登录DEMO
- SQL使用LIKE匹配
- h5 iframe显示不全_干货|H5 唤醒APP小记
- 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
- 初中计算机考试软件word,初中信息技术中考系统中操作题word部分.doc
- unity物理引擎介绍
- AutoCad 批量打印
- Vmware安装BT5进入不了图形界面怎么办(KDE版)
- 玩转华为ENSP模拟器系列 | 配置OSPF ABR路由聚合示例
- PDF怎么拆分?有哪些免费的PDF拆分软件
- Proxy(代理)服务器
- 201771010112罗松《面向对象程序设计(java)》第十六周学习总结
- 谁吃土的时候没有受过委屈?
- STM32 调整重启电压阈值 BOR
- 国内外期货、外汇、股指期货 交易时间(转载)
- jquery清空购物车小案例
- 计算机勾兑双绝是谁发明,勾兑是什么?
热门文章
- 查询student表中姓童的学生情况
- 轻松完成销售业绩的6个技巧
- 读商科需要学python吗_商科学生也需要学编程吗?
- code force 449 div2 C. Nephren gives a riddle
- [案例7-2]商城进货交易记录
- CESM2笔记——porting-新机器移植
- android mysql 驱动_Java-使用com.mysql.jdbc.Driver的Android MySQL
- 驰为 UBook XPro 平板 评测怎么样
- dynamicCondition v3.0.6 插件新增下拉树编辑器
- 【2004-3】【平分核桃】