php常用无限级分类

时间: 2014-12-23 11:19 栏目: PHP 浏览: 4751 赞: 2 踩: 0 字体:

以下为本篇文章全部内容:

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