$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子孙树,递归 迭代 得到家谱树 子孙树相关推荐

  1. python嵌套列表法实现树_在python中创建递归迭代嵌套列表的“数据树”路径

    我正在尝试创建一个"路径"列表,该列表中的每个项目都有.例如输入列表:_list = [[x,x,x], [[x,x,x],[x,x,x]], [x,x,x]] 期望输出: ^{p ...

  2. 【IOI2018】会议【笛卡尔树】【dp】【线段树】

    题意:长度为nnn的序列,qqq次询问,每次给定一个区间,钦定区间中的一个位置xxx,使得区间所有点 与xxx之间的最大值(含端点) 之和 最小,输出最小值. n,q≤7.5×105n,q\leq7. ...

  3. Php数组面包屑导航,php可应用于面包屑导航的迭代寻找家谱树实现方法

    php是通过定义类来实现迭代器接口来构造迭代器,通过yield构造迭代器可以提高性能并节省系统开销,下面就跟着爱站技术频道小编的步伐来学习php可应用于面包屑导航的迭代寻找家谱树实现方法吧. 具体实现 ...

  4. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  5. python卡方检验筛选特征原理_基于Python的遥感特征筛选—递归特征消除(RFE)与极限树(Extra-Trees)...

    引言 基于前几篇文章关于筛选方法的介绍,本篇同样给大家介绍两种python封装的经典特征降维方法,递归特征消除(RFE)与极限树(Extra-Trees, ET).其中,RFE整合了两种不同的超参数, ...

  6. 线段树递归和非递归实现+hdu1166 敌兵布阵

    递归代码: #include <string> #include <cstring> #include <iostream> #include <stdio. ...

  7. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

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

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

  9. python递归查找值返回_python – 从树递归中返回值列表

    我正在尝试自学数据结构,我正在用 Python实现一个k-d树.我有一种方法在我的k-d树类中的一个点的某个半径内搜索树中的点: def within_radius(self, point, radi ...

最新文章

  1. java实现随机字母数字验证码
  2. 斯坦福CS229机器学习课程的数学基础(概率论)翻译完成
  3. 胡珀:从危到机,AI 时代下的安全挑战
  4. PHP 登录DEMO
  5. SQL使用LIKE匹配
  6. h5 iframe显示不全_干货|H5 唤醒APP小记
  7. 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
  8. 初中计算机考试软件word,初中信息技术中考系统中操作题word部分.doc
  9. unity物理引擎介绍
  10. AutoCad 批量打印
  11. Vmware安装BT5进入不了图形界面怎么办(KDE版)
  12. 玩转华为ENSP模拟器系列 | 配置OSPF ABR路由聚合示例
  13. PDF怎么拆分?有哪些免费的PDF拆分软件
  14. Proxy(代理)服务器
  15. 201771010112罗松《面向对象程序设计(java)》第十六周学习总结
  16. 谁吃土的时候没有受过委屈?
  17. STM32 调整重启电压阈值 BOR
  18. 国内外期货、外汇、股指期货 交易时间(转载)
  19. jquery清空购物车小案例
  20. 计算机勾兑双绝是谁发明,勾兑是什么?

热门文章

  1. 查询student表中姓童的学生情况
  2. 轻松完成销售业绩的6个技巧
  3. 读商科需要学python吗_商科学生也需要学编程吗?
  4. code force 449 div2 C. Nephren gives a riddle
  5. [案例7-2]商城进货交易记录
  6. CESM2笔记——porting-新机器移植
  7. android mysql 驱动_Java-使用com.mysql.jdbc.Driver的Android MySQL
  8. 驰为 UBook XPro 平板 评测怎么样
  9. dynamicCondition v3.0.6 插件新增下拉树编辑器
  10. 【2004-3】【平分核桃】