无限极分类不用递归生成多维数组(树)的方法

浏览:267 发布日期:2018/08/10 分类:技术分享
最近在项目中碰到的一个实际问题:后台商品分类用的是无限极方法



现在前台要根据分类遍历出三级导航

需要把查询出来的数据处理成多维数组,方便前台用多个foreach嵌套遍历。
  网上多方搜集资料、经过验证成功后,记录解决方案如下:
  1、从数据库查询出所有数据;
  2、对数据进行初步处理,使二维数组的“键”与三维数组的id相等,将数据存入新数组$tmp;/**
     * 获取树状结构数据
     */
    public function getTree()
    {
        // 取出所有的数据
        $where['isdelete'] = 2;
        $where['isshow'] = 1;
        $thisData = $this->field("id,name,parent_id,level")->where($where)->select();
        foreach($thisData as $k=>$v)
        {
            $tmpArr[$v['id']] = $thisData[$k];
        }
        return $this->generateTree($tmpArr);
    }
  3、调用generateTree() 方法把 $tmpArr数组转换成对应的多维数组/**
     * 极致追求效率,但是对数据结构要求很高
     * 必须二维数组的“键”与三维数组的id相等,并且无法指定起始节点
     */
    private function generateTree($data)
    {
        $tree = array();
        foreach($data as $val){
            if(isset($data[$val['parent_id']])){
                $data[$val['parent_id']]['children'][] = &$data[$val['id']];
            }else{
                $tree[] = &$data[$val['id']];
            }
        }
        return $tree;
    }
  4、将处理后的数据渲染到前台遍历。


本文来自网络整理
最佳答案
评论( 相关
后面还有条评论,点击查看>>