php常用無限級分類

我們在寫程序的時候會經常使用到無限級分類,如商城,或者文章發佈,例如本站也就使用了無限級分類,爲什麼使用無限級分類呢?主要是沒有規定死分類的層級,在使用的時候就會更加的靈活,但是使用靈活了,程序方面呢,顯然還是有很多朋友不知道該如何處理無限級分類的。今天我就跟大家分享一下我的這個無限級分類,我靜態類的方式寫的(順便說一下,我個人認爲,如果一些方法常用或者當擴展類來使用的話,使用靜態類很方便)。如我下面的代碼,以靜態類來寫,我在調用的時候只需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 <[email protected]> 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章