<?php 

//无限极分类
//parent 的值,是该栏目的父栏目的id 反之是
/*0
安徽
合肥
北京
海淀
中关村
上地
河北
石家庄 */
$area = array(
array('id'=>1,'name'=>'安徽','parent'=>0),
array('id'=>2,'name'=>'北京','parent'=>0),
array('id'=>3,'name'=>'海淀','parent'=>2),
array('id'=>4,'name'=>'中关村','parent'=>3),
array('id'=>5,'name'=>'合肥','parent'=>1),
array('id'=>6,'name'=>'上地','parent'=>3),
array('id'=>7,'name'=>'河北','parent'=>0),
array('id'=>8,'name'=>'石家庄','parent'=>7),
); /*
1.是找指定栏目的子孙栏目,即子孙树
2.是找指定栏目的父栏目/父父栏目……顶级栏目,即家谱树 */
//找子栏目
function findson($arr,$id=0) {
//$id栏目的儿子有哪些呢?
//A:数组循环一遍,谁的parent的值 = $id ,谁就是他的儿子
$sons = array(); //子栏目数组
foreach ($arr as $v) {
if ($v['parent'] == $id) {
$sons[] = $v;
}
}
return $sons;
} //print_r(findson($area,0)); //找子孙树 静态属性调用
/*
在函数中声明的static静态变量
无论此函数调用多少次,只初始化一次
以后直接沿用该变量
在递归时,很有用 static 总结
1.修饰类的属性与方法为静态属性,静态方法
2.static::method(),延迟绑定
3.在函数/方法中,声明静态变量用
*/ function subtree($arr,$id=0,$lev=1) {
static $subs = array(); //子孙数组
foreach ($arr as $v) {
if ($v['parent'] == $id) {
$v['lev'] = $lev;
$subs[] = $v; //举例说array('id'=>1,'name'=>'安徽','parent'=>0),
subtree($arr,$v['id'],$lev+1);
}
}
return $subs;
} /*print_r(subtree($area,0,1));
$tree = subtree($area,0,1);
foreach ($tree as $v) {
# code...
echo str_repeat('  ',$v['lev']),$v['name'],'<br />';
}
*/
//第二种不用静态变量
function subtree2($arr,$id=0,$lev=1) {
$subs = array(); //子孙数组
foreach ($arr as $v) {
if ($v['parent'] == $id) {
$v['lev'] = $lev;
$subs[] = $v; //举例说array('id'=>1,'name'=>'安徽','parent'=>0),
$subs = array_merge($subs, subtree2($arr,$v['id'],$lev+1));
}
}
return $subs;
} $tree = subtree2($area,0,1);
foreach ($tree as $v) { echo str_repeat('  ',$v['lev']),$v['name'],'<br />';
} ?>

php之利用递归写无限极分类的更多相关文章

  1. Think PHP递归重新排序无限极子分类数组(递归无限极分类)

    Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...

  2. php递归无限极分类

    递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种: 第一种:返回有排序的数组: <?php $data = array( 1 => array( 'id' => 1, 'p ...

  3. php递归无限极分类实例

    无限级分类原理简介 无限分类看似"高大上",实际上原理是非常简单的 .无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性.要满足无限级分类,数据库需要有两个必须的字段,id ...

  4. php无限极分类递归与普通

    1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...

  5. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  6. PHP实现无限极分类的两种方式,递归和引用

    面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...

  7. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  8. PHP迭代与递归实现无限级分类

    无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 $arr = [ 1=>['id'=>1,'name'=>'父1','father'=& ...

  9. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

随机推荐

  1. ACM1019_最大公倍数

    /*问题说明 一组正整数的最小公倍数(LCM)是最小的正整数约数集合中的所有号码. 例如,5,7和15的最小公倍数是105. 输入 输入将包括多个问题的实例.输入的第一行中,将包含一个整数, 表示问题 ...

  2. Matlab编程-矩阵函数

    (1) are函数 功能:求解Riccati方程的解 Riccati方程的一般形式:A^TX+XA-XBX+C=0 (2)blkdiag函数 函数功能:a=blkdiag(a1,a2,a3,…)表示生 ...

  3. Getting Started · Building a RESTful Web Service

    Getting Started · Building a RESTful Web Service undefined

  4. Java 8:不要再用循环了

    本文由 ImportNew - 进林 翻译自 deadcoderising.欢迎加入翻译小组.转载请见文末要求. 正如我之前所写的,Java 8中的新功能特性改变了游戏规则.对Java开发者来说这是一 ...

  5. java通过解析文件获取apk版本等信息

    import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import ...

  6. nodejs端口被占用。

    I had the same issue. I ran: $ ps aux | grep node to get the process id, then: $ sudo kill -9 follow ...

  7. MySQL (DCL)

    DCL语句 :数据库系统管理员使用,也就是数据库管理员 root 可以添加用户.删除用户.授予和限制用户权限,这些用户的信息可以在数据库的mysql数据库中查询到 1.查看用户信息     1.用ro ...

  8. uva 10916 Factstone Benchmark(对数函数的活用)

    Factstone Benchmark Amtel has announced that it will release a 128-bit computer chip by 2010, a 256- ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充 系列目录 补充一下,有人要表单的代码,这个用代码生成器生成表Flow_Form表 ...

  10. Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(WebTest Maven Plugin)

    上篇:Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin) 之前介绍了怎样在maven中使用webtest插件实现web的集成測试,这里有个遗留 ...