<?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. hdoj 1686 Oulipo【求一个字符串在另一个字符串中出现次数】

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. centos_6.7_系统初始化

    #!/bin/bash #****************************************************************# # ScriptName: acfunin ...

  3. (hdu step 6.3.1)Strategic Game(求用最少顶点数把全部边都覆盖,使用的是邻接表)

    题目: Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...

  4. css考核点整理(三)-css选择器的使用

    css选择器的使用

  5. D2JS 的数据绑定

    D2JS 将数据绑定视为"对象-路径-渲染/收集 "组成.主要 DOM  元素和对象绑定,称为 d2js.root,非主要元素指定数据路径,通过路径定位到值,根据值可进行渲染或收集 ...

  6. 'Service' object has no attribute 'process'

    在使用selenium+phantomjs时,运行总是出现错误信息: 'Service' object has no attribute 'process' 出现该错误的原因是未能找到可执行程序&qu ...

  7. (转)JavaScript判断浏览器类型及版本

    IE 只有IE支持创建ActiveX控件,因此她有一个其他浏览器没有的东西,就是ActiveXObject函数.只要判断window对象存在ActiveXObject函数,就可以明确判断出当前浏览器是 ...

  8. shell跑一个PHP脚本的简单命令

    最近在做一个刷数据库的小功能,需要批量添加到不同的表中,写好PHP文件之后,登录到某一个服务器上面 上传文件的命令:rz 会出现一个弹框可以选择要上传的文件 执行文件并报错误的命令:/usr/loca ...

  9. js自定义方法名

    自定义方法名: <script language="javascript" type="text/javascript">window.onload ...

  10. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...