這里首先介紹一下,什么是無限極分類?
無限極分類簡單點說就是一個類可以分成多個子類,然后一個子類又可以分另外多個子類這樣無限分下去,就好象windows可以新建一個文件夾,然后在這個文件夾里又可以建一些個文件夾,在文件夾底下還可以建一些文件夾一樣
那php又是如何實現它的無限分類的呢?如何把它的各個分類一一列出來呢?代碼如下
<?php /** * 無限級分類 類 */ class Category{ /** * 返回一維數組 * @param [type] $cate 要遞歸的數組 * @param string $html 子級分類前要顯示的縮進符號。默認 '─' * @param integer $pid 父級分類ID。默認為 0,表示頂級分類 * @param integer $level level級,配合 $html 顯示足夠的縮進。默認為 1,表示頂級分類 * @return [type] [description] */ static public function unlimitedForLevel($cate, $html = '─', $pid = 0, $level = 1){ $arr = array(); foreach($cate as $v){ if($v['pid'] == $pid){ $v['level'] = $level; $v['html'] = str_repeat($html, $level - 1); $arr[] = $v; $arr = array_merge($arr, $this->unlimitedForLevel($cate,?$html,?$v['id'],?$level?+?1)); ???} ??} ??return?$arr; ?} ?/** ??*?返回多維數組 ??*?@param?[type]?$cate?要遞歸的數組 ??*?@param?string?$name?子級分類在父分類數組中的?key ??*?@param?integer?$pid?父級分類ID。默認為0,表示頂級分類 ??*?@return?[type]??[description] ??*/ ?static?public?function?unlimitedForlayer($cate,?$name?=?'child',?$pid?=?0){ ??$arr?=?array(); ??foreach($cate?as?$v){ ???if(?$v['pid']?==?$pid){ ????$v[$name]?=?self::unlimitedForlayer($cate,?$name,?$v['id']); ????$arr[]?=?$v; ???} ??} ??return?$arr; ?} ?/** ??*?傳遞子分類ID返回所有父級分類 ??*?@param?[type]?$cate?要遞歸的數組 ??*?@param?[type]?$id?子分類ID ??*?@return?[type]??[description] ??*/ ?static?public?function?getParents($cate,?$id){ ??$arr?=?array(); ??foreach($cate?as?$v){ ???if($v['id']?==?$id){ ????$arr[]?=?$v; ????$arr?=?array_merge(self::getParents($cate,?$v['pid']),?$arr); ???} ??} ??return?$arr; ?} ?/** ??*?傳遞父級分類ID返回所有子分類ID ??*?@param?[type]?$cate?要遞歸的數組 ??*?@param?[type]?$pid?父級分類ID ??*?@return?[type]??[description] ??*/ ?static?public?function?getChildrenId($cate,?$pid){ ??$arr?=?array(); ??foreach($cate?as?$v){ ???if($v['pid']?==?$pid){ ????$arr[]?=?$v['id']; ????$arr?=?array_merge($arr,?self::getChildrenId($cate,?$v['id'])); ???} ??} ??return?$arr; ?} ?/** ??*?傳遞父級分類ID返回所有子級分類 ??*?@param?[type]?$cate?要遞歸的數組 ??*?@param?[type]?$pid?父級分類ID ??*?@return?[type]??[description] ??*/ ?static?public?function?getChildren($cate,?$pid){ ??$arr?=?array(); ??foreach($cate?as?$v){ ???if($v['pid']?==?$pid){ ????$arr[]?=?$v; ????$arr?=?array_merge($arr,?self::getChildren($cate,?$v['id'])); ???} ??} ??return?$arr; ?} } ?>
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END