递归 ---无限极分类中递归查找一个树结构
来源:互联网 发布:淘宝图书 编辑:程序博客网 时间:2024/04/28 01:51
递归的注意点:
1.一定有一个判断条件,否则递归就死循环了
2.每次的递归结果要保存起来,变量自增的实现三种方式:
function(&$bar):通过引用地址
global :通过设置为全局变量
static :设置为静态变量
header( "Content-type: text/html; charset=utf-8" );$arr = array( array( 'uid'=>'1', 'name'=>'总监张', 'pid'=>'0', 'path'=>'0,' ), array( 'uid'=>'2', 'name'=>'副总王', 'pid'=>'1', 'path'=>'0,1,' ), array( 'uid'=>'3', 'name'=>'经理赵', 'pid'=>'2', 'path'=>'0,1,2,' ), array( 'uid'=>'4', 'name'=>'员工赵', 'pid'=>'6', 'path'=>'0,1,2,3,6,' ), array( 'uid'=>'5', 'name'=>'员工房', 'pid'=>'6', 'path'=>'0,1,2,3,6,' ), array( 'uid'=>'6', 'name'=>'组长刘', 'pid'=>'3', 'path'=>'0,1,2,3,' ), array( 'uid'=>'7', 'name'=>'经理光杆', 'pid'=>'2', 'path'=>'0,1,2,' ),);/** * 通过传入要查找的人的pid来递归查找他的下属,代码简陋,理解精神为主 * @param array $data 数组代替数据库中的数据 * @param integer $pid 父id * @param array &$result 结果数组,&保证变量常驻 * @param integer $deep 输出的分隔符--,无实际意义 * @return 树状结构数组 */function getList( $data, $pid=0, &$result=array(), $deep = 0 ) { $deep+=2; foreach ( $data as $key => $val ) { if ( $pid == $val['pid'] ) { $result[] = "|".str_repeat("--", $deep).$val['name']; getList( $data, $val['uid'], $result, $deep ); } } return $result;}//调用函数输出结果$res = getList($arr, 1); //查找副总王的下属foreach($res as $key=>$val){ echo $val."\n";}/*|----副总王|--------经理赵|------------组长刘|----------------员工赵|----------------员工房|--------经理光杆*/
还是上边的数据,现在要查一个员工的所有上级
/** * 传入员工的id,可以查找员工所属的上级 * @param array $data 数组代替数据库中的数据 * @param integer $id 要查找的员工的id * @param array &$result 结果数组,&保证变量常驻 * @return 结果 */function getLink($data, $id=0, &$result=array()){ foreach ($data as $key => $val) { if ($val['uid'] == $id) { $result[] = $val['name']; getLink($data, $val['pid'], $result); } } return $result;}$res = getLink($arr , 5); //查找员工房的上级foreach ($res as $key => $val) { echo $val." | ";}/* 员工房 | 组长刘 | 经理赵 | 副总王 | 总监张 | */
注:也可用全路径无限分类:数据中存了path,全路径可通过concat(path,",",id)算出来。
表中需要有一个path字段来进行路径查询 类似 'a-b-c-d';
优点:查询快,比递归快
缺点:增加,移动分类时稍显复杂
0 0
- 递归 ---无限极分类中递归查找一个树结构
- 递归无限极查找上级分类
- 递归无限极分类
- 递归无限极分类
- 递归无限极分类
- 递归-无限极分类
- 无限级分类之递归查找子孙树
- 无限级分类之递归查找家谱树
- sqlserver实现树形结构递归查询(无限极分类)
- sqlserver实现树形结构递归查询(无限极分类)
- sqlserver实现树形结构递归查询(无限极分类)
- 无限极分类递归排序
- php递归无限极分类
- 递归实现无限极分类
- 递归实现无限极分类
- 无限递归产品分类
- 递归无限分类
- 无限递归产品分类
- C++构造函数 & 拷贝构造函数 & 派生类的构造函数 & 虚继承的构造函数
- 决策树
- mysql中的unsigned
- linux虚拟机上svn客户端连接问题
- (五下下)$timeout方法,控制器与作用域
- 递归 ---无限极分类中递归查找一个树结构
- js进阶篇之数组-流程控制语句-事件-对象(慕课网学习笔记3-7章)
- unity协程来制作提示(初学者)
- 再谈PHP单引号和双引号区别
- 使用Objective-C创建UUID
- Python3,命令交互式,无法使用退格键、方向键
- java日志组件介绍(common-logging,log4j,slf4j,logback )
- oracle 11g rac 下安装em出错的一些解决方法
- Struts2的执行流程全图