php常用无限级分类

来源:互联网 发布:java图形程序设计 编辑:程序博客网 时间:2024/05/17 08:02

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

扫二维码快速加群:

qun.png


0 0