php无限极分类方法

仅供参考:

//控制器
$data = M('category')->select();
$datas = D('Category')->_getTree($data, 0,0,TRUE);
$datas = $this->echo_tree($datas); print_r($datas);die; //递归取出分类 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; }

 上面两种方法只是标记的哪个是以及,哪个是二级,下面再用个暴力点的,直接直观的显示出来等级的划分

/**
 * 输出树结构
 * @param  array 数据源
 * @return void
 */
function echo_tree($tree) {
    foreach ($tree as $row) {
        for ($i = $row['level']; $i > 0; $i--) {
            echo '|----';
        }
        echo $row['name'];
        echo '<br>';
    }
}

  

原文地址:https://www.cnblogs.com/dalaowang/p/9633903.html