深入淺析PHP無限極分類的案例教程
平時(shí)開發(fā)中或多或少不可避免會(huì)遇到無限極分類的問題,因?yàn)樾省⑦壿嫷葐栴}也一直使這類問題比較尖銳。今天我們以yii2框架為基礎(chǔ),欄目無限極為例,對(duì)這個(gè)問題進(jìn)行一個(gè)簡(jiǎn)單的處理。
首先我們有一張欄目數(shù)據(jù)表 tree
表結(jié)構(gòu)如下圖(原文有圖)
看上去表結(jié)構(gòu)很簡(jiǎn)單。
我們插入幾條測(cè)試數(shù)據(jù)
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');
樹形結(jié)構(gòu)大致如下
|A
|--a
|----aa
|------aaa
|B
|--b
這也正是我們所需要的數(shù)據(jù)結(jié)構(gòu)形式,下面我們來看看如何處理才能夠得到所需要的結(jié)果。
我們前面也說了,以yii2為基礎(chǔ),因此我們的寫法也按照面向?qū)ο蟮囊?guī)則來
class tree { //訪問index查看樹形結(jié)構(gòu) public function actionIndex () { $data = self::getTree(); //為了方便測(cè)試,我們這里以json格式輸出 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return $data; } //獲取樹 public static function getTree () { //這里我們直接獲取所有的數(shù)據(jù),然后通過程序進(jìn)行處理 //在無限極分類中最忌諱的是對(duì)數(shù)據(jù)庫進(jìn)行層層操作,也就很容易造成內(nèi)存溢出 //最后電腦死機(jī)的結(jié)果 $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; } }
我們?cè)L問下tree/index看看,效果圖如下
這樣我們可以看到一個(gè)很清晰的樹形結(jié)構(gòu)圖,也就是我們最終所需要的。
關(guān)于PHP無限極分類的案例教程就給大家介紹這么多,希望對(duì)大家有所幫助!
相關(guān)文章
php中static 靜態(tài)變量和普通變量的區(qū)別
靜態(tài)變量與普通變量的區(qū)別在哪里呢,對(duì)于許多初學(xué)php的朋友來講可能不是點(diǎn)擊的明白了,今天我們來看看php中static 靜態(tài)變量和普通變量的區(qū)別吧,需要的朋友可以參考下2016-12-12php實(shí)現(xiàn)兼容2038年后Unix時(shí)間戳轉(zhuǎn)換函數(shù)
這篇文章主要介紹了php實(shí)現(xiàn)兼容2038年后Unix時(shí)間戳轉(zhuǎn)換函數(shù),使用方法和就的函數(shù)一樣,非常實(shí)用,推薦給大家,希望大家能夠喜歡。2015-03-03PHP獲取當(dāng)前時(shí)間的5種實(shí)現(xiàn)方式
這篇文章主要介紹了PHP獲取當(dāng)前時(shí)間的5種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01laravel model模型定義實(shí)現(xiàn)開啟自動(dòng)管理時(shí)間created_at,updated_at
今天小編就為大家整理了一篇laravel model模型定義實(shí)現(xiàn)開啟自動(dòng)管理時(shí)間created_at,updated_at,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP中數(shù)據(jù)庫單例模式的實(shí)現(xiàn)代碼分享
這篇文章主要介紹了PHP中數(shù)據(jù)庫單例模式的實(shí)現(xiàn)代碼分享,本文先是講解了單例模式的一些知識(shí),然后給出了數(shù)據(jù)庫單例模式實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08php操作XML、讀取數(shù)據(jù)和寫入數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了php操作XML、讀取數(shù)據(jù)和寫入數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08生成隨機(jī)字符串和驗(yàn)證碼的類的PHP實(shí)例
這篇文章主要介紹了生成隨機(jī)字符串和驗(yàn)證碼的類的PHP實(shí)例,有需要的朋友可以參考一下2013-12-12