談一次php無限極分類的案例 php無限極分類顯示 php無限極分類下拉框 php無限極分類函

WBOY
發布: 2016-07-29 08:50:52
原創
1040 人瀏覽過

作者:白狼來源:http://www.manks.top/php_tree_deep.html 本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。原文有圖片。

平時開發中或多或少不可避免會遇到無限極分類的問題,因為效率、邏輯等問題也一直使這類問題比較尖銳。今天我們以yii2框架為基礎,欄目無限極為例,對這個問題進行一個簡單的處理。

首先我們有一張欄位資料表 tree

表結構如下圖(原文有圖)

看上去表結構很簡單。

我們插入幾條測試資料

INSERT INTO `tree` 
(`id`, `parent_id`, `name`) 
VALUES 
(1, 0, 'A'), 
(2, 0, 'B'), 
(3, 1, 'a'), 
(4, 3, 'aa'), 
(5, 2, 'b'), 
(6, 4, 'aaa');

登入後複製

樹形結構大致如下

|A 
|--a 
|----aa 
|------aaa 
|B 
|--b
登入後複製

這也正是我們所需要的資料結構形式,下面我們來看看如何處理才能夠得到所需的結果。

我們前面也說了,以yii2為基礎,因此我們的寫法也按照物件導向的規則來

class tree { 
    //访问index查看树形结构 
    public function actionIndex () { 
        $data = self::getTree(); 
        //为了方便测试,我们这里以json格式输出 
        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
        return $data; 
    } 
    //获取树 
    public static function getTree () { 
        //这里我们直接获取所有的数据,然后通过程序进行处理 
        //在无限极分类中最忌讳的是对数据库进行层层操作,也就很容易造成内存溢出 
        //最后电脑死机的结果 
        $data = static::find()->all(); 
        return self::_generateTree($data); 
    } 
    //生成树 
    private static function _generateTree ($data, $pid = 0) { 
        $tree = []; 
        if ($data && is_array($data)) { 
            foreach($data as $v) { 
                if($v['parent_id'] == $pid) { 
                    $tree[] = [ 
                        'id' => $v['id'], 
                        'name' => $v['name'], 
                        'parent_id' => $v['parent_id'], 
                        'children' => self::_generateTree($data, $v['id']), 
                    ]; 
                } 
            } 
        } 
        return $tree; 
    } 
}

登入後複製

我們訪問下tree/index看看,效果圖如下

這樣我們可以看到一個很清晰的樹狀結構圖,也就是我們最終所需要的。

以上就介紹了談一次php無限極分類的案例,包括了php,無限極方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!