1. 程式人生 > >php實現無限分類

php實現無限分類

/**
 *@access public
 * @param $pid 節點的id
 * @param array 返回該節點的所有後代節點
 */
public function list_cate($pid = 0){
    #獲取所有記錄
    $query = $this->db->get(self::TBL_CATE);
    $cates = $query->result_array();
    #對類別進行重組
    return $this->_tree($cates,$pid);
}

/**
 *@access private
 *@param $arr array 要遍歷的陣列
 *@param $pid 節點的pid,預設為0,表示從頂級節點開始
 *@param $level int 表示層級 預設為0
 *@param array 排好序的所有後代節點
 */
privete function _tree($arr,$pid = 0,$level = 0){ static $tree = array(); #用於儲存重組的結果,注意使用靜態變數 foreach($arr as $v){ if($v['parent_id'] == $pid){ #說明找到了以pid為父節點的子節點,將其儲存 $v['level'] = $level; $tree[] = $v; #然後以當前節點為父節點,繼續找後代節點 $this
->_tree($arr,$v['cat_id'],$level+1); } } return $tree; } #獲取某節點下面的直接子分類 public function child($arr,$pid = 0){ $child = array(); foreach($arr as $k => $v){ if($v['parent_id'] == $pid){ $child[] = $v; } } return $child; } public function
cate_list($arr,$pid = 0){
#獲取頂級分類,也就是parent_id的類別 $child = $this->child($str,$pid); #如果為空,則返回null if(empty($child)){ return null; } #如果不為空,則按照非方法繼續找其子節點 foreach($child as $k => $v){ $current_child = $this->cate_list($arr,$v['cat_id']); if($current_child != null){ #說明,該分類節點還有子分類節點,則將子節點作為該節點的一個元素來儲存 $child[$k]['child'] = $current_child; } } return $child; }