• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
测试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;
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
phpredis中文手册发布时间:2022-07-10
下一篇:
php语言中global 和 $_GLOBAL全局变量区别发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap