• php 无限分类 树形数据 格式化


    测试demo
    ------------------------------------------------------------------------------------
    <?php 
    function genTree($items,$id='id',$pid='pid',$son = 'children'){
        $tree = array(); //格式化的树
        $tmpMap = array();  //临时扁平数据
        
        foreach ($items as $item) {
            $tmpMap[$item[$id]] = $item;
        }
        
        foreach ($items as $item) {
            if (isset($tmpMap[$item[$pid]])) {
                $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
            } else {
                $tree[] = &$tmpMap[$item[$id]];
            }
        }
        unset($tmpMap);
        return $tree;
    }
    
    $items1 = array(
            array('id' => 1, 'pid' => 0, 'name' => '一级11' ),
            array('id' => 11, 'pid' => 0, 'name' => '一级12' ),
            array('id' => 2, 'pid' => 1, 'name' => '二级21' ),
            array('id' => 10, 'pid' => 11, 'name' => '二级22' ),
            array('id' => 3, 'pid' => 1, 'name' => '二级23' ),
            array('id' => 12, 'pid' => 11, 'name' => '二级24' ),
            array('id' => 9, 'pid' => 1, 'name' => '二级25' ),
            array('id' => 14, 'pid' => 1, 'name' => '二级26' ),
            array('id' => 4, 'pid' => 9, 'name' => '三级31' ),
            array('id' => 6, 'pid' => 9, 'name' => '三级32' ),
            array('id' => 7, 'pid' => 4, 'name' => '四级41' ),
            array('id' => 8, 'pid' => 4, 'name' => '四级42' ),
            array('id' => 5, 'pid' => 4, 'name' => '四级43' ),
            array('id' => 13, 'pid' => 4, 'name' => '四级44' ),
            array('id' => 15, 'pid' => 8, 'name' => '五级51' ),
            array('id' => 16, 'pid' => 8, 'name' => '五级52' ),
            array('id' => 17, 'pid' => 8, 'name' => '五级53' ),
            array('id' => 18, 'pid' => 16, 'name' => '六级64' ),
    ); 
    
    $time1 = microtime(true);
    var_dump(genTree($items1));
    $time2 = microtime(true);
    echo "function 时间1:".($time2-$time1);
    ?>
    ------------------------------------------------------------------------
    
    
    
    
    
    整合TP框架
    -------------------------------------------------------------
    
    控制器端:
                   // 先取出所有的权限
            $priModel = D('Privilege');
            $data = $priModel->priTree();
            $arr = $priModel->genTree($data);
    模型端代码:
        public function priTree(){
            $data = $this->select();
            return $this->_reSort($data);
        }
        #递归对有的分类进行重新排序
        public function _reSort($data, $parent_id=0, $level=0){
            static $ret = array();
            foreach ($data as $k => $v){
                if($v['parent_id'] == $parent_id){
                    // 把level值放到这个分类里,这样就可以知道这个分类是第几级的
                    $v['level'] = $level;
                    $ret[] = $v;
                    // 再找这个分类的子分类
                    $this->_reSort($data, $v['id'], $level+1);
                }
            }
            return $ret;
        }
        #获取树形结果
        public function genTree($items,$id='id',$pid='parent_id',$son = 'children'){
            $tree = array(); //格式化的树
            $tmpMap = array();  //临时保存数据
            foreach ($items as $item) {
                $tmpMap[$item[$id]] = $item;
            foreach ($items as $item) {
                if (isset($tmpMap[$item[$pid]])) {
                    $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
                } else {
                    $tree[] = &$tmpMap[$item[$id]];
                }
            }
            unset($tmpMap);
            return $tree;
        }
  • 相关阅读:
    MongoDB 搭建可复制群集
    jquery获取json对象中的key小技巧,遍历json串所有key,value
    21-spring学习-springMVC实现CRUD
    java线程--volatile实现可见性
    java线程-synchronized实现可见性代码
    java线程-java多线程之可见性
    java反射--通过反射了解集合泛型的本质
    java反射--方法反射的基本操作
    java反射--获取成员变量信息
    java反射-获取方法信息
  • 原文地址:https://www.cnblogs.com/hgj123/p/6293935.html
Copyright © 2020-2023  润新知