以下为本篇文章全部内容:
我们在写程序的时候会经常使用到无限级分类,如商城,或者文章发布,例如本站也就使用了无限级分类,为什么使用无限级分类呢?主要是没有规定死分类的层级,在使用的时候就会更加的灵活,但是使用灵活了,程序方面呢,显然还是有很多朋友不知道该如何处理无限级分类的。今天我就跟大家分享一下我的这个无限级分类,我静态类的方式写的(顺便说一下,我个人认为,如果一些方法常用或者当扩展类来使用的话,使用静态类很方便)。如我下面的代码,以静态类来写,我在调用的时候只需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进行解答,也可以加入交流群
扫二维码快速加群:
总赞数量:18274
总踩数量:128087
文章数量:29