A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秋明山吴师傅 初级黑马   /  2017-12-13 16:02  /  1155 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

应用场景:往往在我们的日常生活中总有分类,但是一般分类如果不按照顺序显示就会很乱。无限级分类就产生了在这由于方便我就先自己手动定义一个数组,各位同学回去可要自己从数据库查出来哦,基本的字段要求是 id ,分类名称,父分类id
[PHP] 纯文本查看 复制代码
//定义一个分类数组
$categories=array(
array('id'=>1,'name'=>'php','parent_id'=>'0'),
array('id'=>2,'name'=>'javascript','parent_id'=>'0'),
array('id'=>3,'name'=>'C#','parent_id'=>'0'),
array('id'=>4,'name'=>'laravel','parent_id'=>'1'),
array('id'=>5,'name'=>'jquery','parent_id'=>'2'),
array('id'=>6,'name'=>'Json.NET ','parent_id'=>'3'),
);

无限级分类要素:1.id 用于表示每个分类的唯一性。 2.分类名 3.父分类id 用于建立分类与分类的关系。

Q:细心的同学阅读的上面会发现 为什么会有parent_id 为0的数据呢?

A:由于前提说了上面数组是模拟mysql查询得出的数据,所以parent_id 就是父类的id,而mysql在auto_increment的主键中并无id为0的,所以我们就用这个特殊的键值作为父分类id,所以父分类 id 为0的话,此分类就是顶级分类。

[PHP] 纯文本查看 复制代码
/**
TODO
$categories 总的分类 type:array
$parent_id 从哪个分类开始 我们一般从顶级分类一层一层往下找
$level 等级 一般用于后面缩进 
**/
function recurision($categories,$parent_id=0,$level=1){
static $recurision=array();
foreach ($categories as $key => $value) {
if ($value['parent_id'] == $parent_id) {
# code...
$value['level'] = $level;
$recurision[]=$value;
$level++;
recurision($categories,$value['id'],$level);
}	

}
return $recurision;
}
$recurision=recurision($categories);


递归的核心就是递归出口,说白了就是什么时候停止。
上面代码还有一个同学们容易忽略就是静态变量,因为静态之后,此变量只会被初始化一次!
我在上面的停止就是当当前的分类下没有子分类,就不再调用函数。
刚开始入门不大建议同学们去看代码的在第几层,这样很抽象也很晕,建议大家把数据代入后,看这个函数如何运行 一个一个查看$recurision变化

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马