1. 程式人生 > >無限極分類方法

無限極分類方法

父節點 == 標記 scl 一次 靜態數組 play ret 分類

僅供參考:

//控制器
$data = M(‘category‘)->select();
$datas = D(‘Category‘)->_getTree($data, 0,0,TRUE);
$this->assign(‘data‘,$datas);
$this->display();


//遞歸取出分類
public function _getTree($data, $parent_id=0, $level=0, $isClear = FALSE){
static $ret = array();
if($isClear)
$ret = array();
foreach ($data as $k => $v)
{
if($v[‘parentid‘] == $parent_id)
{
// 把level放到這個權限中用來標記當前這個權限是第幾級的
$v[‘level‘] = $level;
$ret[] = $v;
// 再找當前這個權限的子權限
$this->_getTree($data, $v[‘id‘], $level+1);
}
}
return $ret;
}

public function _getTrees($array, $pid =0, $level = 0){
//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static $list = [];
foreach ($array as $key => $value){
// print_r($value);die;
//第一次遍歷,找到父節點為根節點的節點 也就是pid=0的節點
if ($value[‘parentid‘] == $pid){
//父節點為根節點的節點,級別為0,也就是第一級
$value[‘level‘] = $level;
//把數組放到list中
$list[] = $value;
//把這個節點從數組中移除,減少後續遞歸消耗
// unset($array[$key]);
//開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
$this-> _getTrees($array, $value[‘id‘], $level+1);

}
}
return $list;
}

無限極分類方法