無限分類展示

1.先組裝樹的深度
2.遞歸遍歷樹的深度
控制器代碼

//無限分類樹獲取
            $menu = Db::name("rht_first_battalion_cate")->field('id,pid,title')->where('is_del',0)->order('sort desc,id asc')->select();
            $getTree = $this->FirstBattalionCateLogic->getTree($menu);
            $menuList = $this->FirstBattalionCateLogic->getTreeMenu($getTree);
            foreach ($menuList as $men_key=>$men_value){
                $menuList[$men_key]['repeat'] = '';
               for ($i=1;$i<=$men_value['deep'];$i++){
                    //格式 ├ 中臺首頁
                    $menuList[$men_key]['repeat'].= '├ ';
                }
                $menuList[$men_key]['repeat'] =  $menuList[$men_key]['repeat'].$men_value['title'];
            }
            $this->assign('menuList',$menuList);

邏輯代碼

/**
     * 將數組改成樹裝結構
     * @param array $data
     * @return array
     */
    public function getTree(Array $data)
    {
        $tree = array();
        $tmp = array();
        foreach ($data as $row){
            $tmp[$row['id']] = $row;
        }
        foreach ($data as $row){
            //判斷每個數組的父id 是否存在 $tmp 的數組內
            //存在則說明這個數組微其他數組的子元素,不存在關係 pid爲0 即最高子元素
            if(isset($tmp[$row['pid']])){
                $tmp[$row['pid']]['tree'][]=&$tmp[$row['id']];
            }else{
                $tree[] = &$tmp[$row['id']];
            }
        }
        return $tree;
    }
    /**
     * 獲取樹狀結構
     * @param array $data
     * @return array
     */
    public function getTreeMenu(Array $tree,$data=array(),&$i=0,$deep=1)
    {
        foreach ($tree as $val) {
            $data[$i] = $val;
            $data[$i]['deep'] = $deep;
            unset($data[$i]['tree']);
            $i++;
            if(isset($val['tree']))
            {
                $data = $this->getTreeMenu($val['tree'],$data,$i,$deep+1);
            }
        }
        return $data;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章