深入淺析PHP無(wú)限極分類的案例教程
平時(shí)開(kāi)發(fā)中或多或少不可避免會(huì)遇到無(wú)限極分類的問(wèn)題,因?yàn)樾省⑦壿嫷葐?wèn)題也一直使這類問(wèn)題比較尖銳。今天我們以yii2框架為基礎(chǔ),欄目無(wú)限極為例,對(duì)這個(gè)問(wèn)題進(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');
樹(shù)形結(jié)構(gòu)大致如下
|A
|--a
|----aa
|------aaa
|B
|--b
這也正是我們所需要的數(shù)據(jù)結(jié)構(gòu)形式,下面我們來(lái)看看如何處理才能夠得到所需要的結(jié)果。
我們前面也說(shuō)了,以yii2為基礎(chǔ),因此我們的寫(xiě)法也按照面向?qū)ο蟮囊?guī)則來(lái)
class tree {
//訪問(wèn)index查看樹(shù)形結(jié)構(gòu)
public function actionIndex () {
$data = self::getTree();
//為了方便測(cè)試,我們這里以json格式輸出
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $data;
}
//獲取樹(shù)
public static function getTree () {
//這里我們直接獲取所有的數(shù)據(jù),然后通過(guò)程序進(jìn)行處理
//在無(wú)限極分類中最忌諱的是對(duì)數(shù)據(jù)庫(kù)進(jìn)行層層操作,也就很容易造成內(nèi)存溢出
//最后電腦死機(jī)的結(jié)果
$data = static::find()->all();
return self::_generateTree($data);
}
//生成樹(shù)
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問(wèn)下tree/index看看,效果圖如下

這樣我們可以看到一個(gè)很清晰的樹(shù)形結(jié)構(gòu)圖,也就是我們最終所需要的。
關(guān)于PHP無(wú)限極分類的案例教程就給大家介紹這么多,希望對(duì)大家有所幫助!
- php無(wú)限極分類實(shí)現(xiàn)的兩種解決方法
- PHP超牛逼無(wú)限極分類生成樹(shù)方法
- php無(wú)限極分類遞歸排序?qū)崿F(xiàn)方法
- php 無(wú)限極分類
- PHP實(shí)現(xiàn)無(wú)限極分類生成分類樹(shù)的方法
- php通過(guò)前序遍歷樹(shù)實(shí)現(xiàn)無(wú)需遞歸的無(wú)限極分類
- PHP無(wú)限極分類函數(shù)的實(shí)現(xiàn)方法詳解
- php實(shí)現(xiàn)smarty模板無(wú)限極分類的方法
- thinkphp5使用無(wú)限極分類
- 淺談PHP無(wú)限極分類原理
- PHP實(shí)現(xiàn)無(wú)限極分類的兩種方式示例【遞歸和引用方式】
- php無(wú)限極分類實(shí)現(xiàn)方法分析
相關(guān)文章
Zend Framework數(shù)據(jù)庫(kù)操作方法實(shí)例總結(jié)
這篇文章主要介紹了Zend Framework數(shù)據(jù)庫(kù)操作方法,結(jié)合實(shí)例形式總結(jié)分析了Zend Framework數(shù)據(jù)庫(kù)操作相關(guān)函數(shù)使用技巧與注意事項(xiàng),需要的朋友可以參考下2016-12-12
如何解決phpmyadmin導(dǎo)入數(shù)據(jù)庫(kù)文件最大限制2048KB
這篇文章主要介紹了如何解決phpmyadmin導(dǎo)入數(shù)據(jù)庫(kù)文件最大限制2048KB的相關(guān)資料,需要的朋友可以參考下2015-10-10
PHP命令行執(zhí)行整合pathinfo模擬定時(shí)任務(wù)實(shí)例
下面小編就為大家?guī)?lái)一篇PHP命令行執(zhí)行整合pathinfo模擬定時(shí)任務(wù)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
使用laravel和ECharts實(shí)現(xiàn)折線圖效果的例子
今天小編就為大家分享一篇使用laravel和ECharts實(shí)現(xiàn)折線圖效果的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
PHP isset empty函數(shù)相關(guān)面試題及解析
這篇文章主要介紹了PHP isset empty函數(shù)相關(guān)面試題及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

