我们在写程序的时候会经常使用到无限级分类,如商城,或者文章发布,例如本站也就使用了无限级分类,为什么使用无限级分类呢?主要是没有规定死分类的层级,在使用的时候就会更加的灵活,但是使用灵活了,程序方面呢,显然还是有很多朋友不知道该如何处理无限级分类的。今天我就跟大家分享一下我的这个无限级分类,我静态类的方式写的(顺便说一下,我个人认为,如果一些方法常用或者当扩展类来使用的话,使用静态类很方便)。如我下面的代码,以静态类来写,我在调用的时候只需Cate::level(传值);并且静态类的好处是只在内存生成一次,不会过多的去浪费资源,对于静态类我们就不追述了。下面来看一下代码。
常用无限级分类代码:
<?php
// +----------------------------------------------------------------------
// | Sphynx递归无限级分类多种情况
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://www.sunnyos.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Sphynx <admin@sunnyos.com> QQ327388905
// +----------------------------------------------------------------------
/*
*+----------------------------------------------------------------------
* 递归无限级分类多种情况
*+----------------------------------------------------------------------
*/
class Cate{
/*
* 适合后台列表遍历的格式
* @param $cate 要处理的分类数组
* @param $html 二级分类分隔符
* @param $pid 上级分类id
* @param $pad 分隔符数量
*/
public static function level($cate,$html='----',$pid=0,$pad=0){
$arr = array();
foreach ($cate as $key => $value) {
if($value['pid']==$pid){
$value['pad'] = $pad+1;
$value['html'] = str_repeat($html,$pad);
$arr[] = $value;
$arr = array_merge($arr,self::level($cate,$html,$value['id'],$pad+1));
}
}
return $arr;
}
/*
* 多维数组遍历,适合用于顶部菜单和列表
* @param $cate 要处理的分类数组
* @param $name 顶级分类之后的二级分类下标
* @param $pid 上级分类id
*/
public static function layer($cate,$name = 'child',$pid = 0){
$arr = array();
foreach ($cate as $v) {
if($v['pid']==$pid){
$v[$name] = self::layer($cate,$name,$v['id']);
$arr[] = $v;
}
}
return $arr;
}
/*
* 通过子分类查找父级分类
* @param $cate 要处理的分类数组
* @param $id 子类id
*/
public static function getParents($cate,$id){
$arr = array();
foreach ($cate as $key => $value) {
if($value['id']==$id){
$arr[] = $value;
$arr = array_merge(self::getParents($cate,$value['pid']),$arr);
}
}
return $arr;
}
/*
* 通过父类查找子类分类
* @param $cate 要处理的分类数组
* @param $id 父类id
*/
public static function getFind($cate,$id){
$arr = array();
foreach ($cate as $key => $value) {
if($value['pid']==$id){
$arr[] = $value;
$arr = array_merge($arr,self::getFind($cate,$value['id']));
}
}
return $arr;
}
}
上面的方法大家不难看出来,明显是使用了递归来操作,因为使用递归我们可以知道这个分类到底有多深。我们可以完全的把所有子分类或者排序都组装成我们想要的数组。文章的每个字每个标点符号,都是作者亲自手敲,请各位尊重作者的劳动成功。转载请带上本站地址,www.sunnyos.com 本站只做原创博客,杜绝复制粘贴,杜绝百度一模一样的垃圾文章。只为程序员分享亲身经验和有用的解决方案。
如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群
扫二维码快速加群: