php之利用递归写无限极分类
<?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之利用递归写无限极分类的更多相关文章
- Think PHP递归重新排序无限极子分类数组(递归无限极分类)
Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...
- php递归无限极分类
递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种: 第一种:返回有排序的数组: <?php $data = array( 1 => array( 'id' => 1, 'p ...
- php递归无限极分类实例
无限级分类原理简介 无限分类看似"高大上",实际上原理是非常简单的 .无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性.要满足无限级分类,数据库需要有两个必须的字段,id ...
- php无限极分类递归与普通
1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...
- php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- PHP迭代与递归实现无限级分类
无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 $arr = [ 1=>['id'=>1,'name'=>'父1','father'=& ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
随机推荐
- JavaScript高级程序设计17.pdf
导航和打开窗口 使用window.open()方法可以导航到一个特定的URL也可以打开一个新的浏览器窗口,接收4个参数:要加载的URL.窗口目标.特性字符串和一个表示新页面是否取代浏览器历史记录中当前 ...
- 修改maven中的jdk版本
1.修改项目的pom.xml文件 <build> <plugins> <plugin> <groupId>org.apache.maven.plugin ...
- lightoj1051 Good and Bad (dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1051 题目大意:给你一个字符串,只包含大写字母和‘?’,如果字符串中出现了连续三个以上 ...
- memcached的基本命令(安装、卸载、启动、配置相关)
memcached的基本命令(安装.卸载.启动.配置相关):-p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcac ...
- Android开源项目分类汇总【畜生级别】[转]
Android开源项目分类汇总 欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star.Fork :) 微博:Trinea 主页:www.t ...
- 文件上传~Uploadify上传控件~续(多文件上传)
对于Uploadify文件上传之前已经讲过一次(文件上传~Uploadify上传控件),只不过没有涉及到多文件的上传,这回主要说一下多个文件的上传,首先,我们要清楚一个概念,多文件上传前端Upload ...
- guice框架的入门使用
guice框架是一种类似于spring的ioc容器的一种框架,使用简单,比較轻量级的一个框架,速度极快,灵活性极强,如今就先来写几个guice的程序. 在这里我就不给出guice的jar包,这些都能够 ...
- [CSS] Transforms
Degrees and Turns Degrees are just one value that can be set to a rotate transform to determine how ...
- SSL 错误
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.net.ssl.in ...
- JavaScript的变量提升
在JavaScript中,var变量具有函数级作用域,而且是整个函数作用域.为什么会是整个函数作用域呢?因为var变量具有变量(声明)提升功能,能将变量声明隐式的提升到函数体的顶部.这样做的一个好处就 ...