首頁 php框架 ThinkPHP 利用ThinkPHP6實作遞歸樹結構

利用ThinkPHP6實作遞歸樹結構

Jun 20, 2023 pm 02:48 PM
thinkphp 遞迴 樹結構

隨著網路的發展,各種網站和應用程式中都出現了樹狀結構的展示,例如分類目錄、人員組織架構、權限管理等。在這些應用場景中,遞歸樹結構已經成為了非常重要且實用的模型之一。

ThinkPHP6是一種基於MVC模型的PHP開發框架,其擁有豐富的擴展庫和優秀的性能,廣受開發者的認可和使用,而在ThinkPHP6中實現遞歸樹結構也變得更加方便了。

下面,我們將介紹如何在ThinkPHP6中使用遞歸函數來建立樹狀結構。

一、定義資料庫結構

在實作遞歸樹結構之前,首先需要知道如何將資料儲存在資料庫中,以便於應用程式進行處理。在這個範例中,我們將建立一個「分類」表,在分類表中儲存分類名稱、分類ID、父級ID等資訊。

分類表結構如下:

id ​​int(11) 主鍵
name varchar(50) 分類名稱
parent_id int(11) 父級分類ID

二、實作遞歸函數

接下來,我們需要實作一個遞歸函數,用於查詢從根節點開始的所有子節點。在ThinkPHP6中,可以使用select方法結合$where參數來實現對指定列的查詢,例如:

Db::name('分類表')->where('parent_id',$id) ->select();

在這個例子中,$id是傳遞給遞歸函數的參數,表示目前節點的ID。遞歸函數將根據該ID遞歸查詢該節點的所有子節點。

下面是遞歸函數的實作:

function getChildren($id){
    //查询该节点下的所有子节点
    $children=Db::name('分类表')->where('parent_id',$id)->select();
    //如果没有子节点,返回空数组
    if(empty($children)){
        return $children;
    }
    //递归查询子节点的子节点,并将结果合并到$children数组中
    foreach($children as $k=>$v){
        $children[$k]['children']=$this->getChildren($v['id']);
    }
    return $children;
} 
登入後複製

在這個函數中,我們先查詢該節點下的所有子節點,並將結果保存在$children陣列中。如果該節點沒有子節點,直接傳回空數組。

接下來,我們使用foreach循環遍歷$children數組中的每個子節點,並呼叫遞歸函數來查詢該子節點的所有子節點。將結果合併到$children數組中,最終傳回整個$children數組。

三、輸出樹狀結構

當遞歸函數得到節點及其所有子節點的資訊後,我們需要將它們輸出為樹狀結構。這可以透過遍歷遞歸函數傳回的數組,並根據每個節點的深度輸出相應的縮排符號來實現。

下面是輸出樹狀結構的程式碼:

function outputTree($arr,$deep=0){
    //定义缩进符号
    $symbol='|--';
    $html='';
    
    foreach($arr as $v){
        //根据节点深度输出缩进符号
        $html.=str_repeat('       ',$deep).$symbol.$v['name'].'<br/>';
        //如果有子节点,继续遍历
        if(!empty($v['children'])){
            $html.=$this->outputTree($v['children'],$deep+1);
        }
    }
    
    return $html;
}
登入後複製

在這個函數中,我們先定義了縮排符號,然後遞歸遍歷數組中的每個節點。根據目前節點的深度輸出對應數量的縮排符號。如果一個節點有子節點,繼續遞歸遍歷該節點的所有子節點。

最後,輸出整個樹狀結構的程式碼如下:

$id=0;
$arr=$this->getChildren($id);
$html=$this->outputTree($arr);
echo $html;
登入後複製

在這個程式碼中,$id表示根節點的ID,我們先呼叫遞歸函數來取得所有子節點的信息,然後呼叫輸出樹狀結構的函數,將整個樹狀結構輸出到HTML頁面中。

四、總結

透過使用ThinkPHP6的豐富擴充函式庫和遞歸函數,我們可以輕鬆地建立遞歸樹結構,讓應用程式更易於管理和使用。希望本文能幫助您建構樹狀結構時的開發工作,讓您更有效率地完成任務。

以上是利用ThinkPHP6實作遞歸樹結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式的遞歸實作:遞迴深度有限制嗎? C++ 函式的遞歸實作:遞迴深度有限制嗎? Apr 23, 2024 am 09:30 AM

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

thinkphp專案怎麼運行 thinkphp專案怎麼運行 Apr 09, 2024 pm 05:33 PM

執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

C++ lambda 表達式是否支援遞迴? C++ lambda 表達式是否支援遞迴? Apr 17, 2024 pm 09:06 PM

是的,C++Lambda表達式可以透過使用std::function支援遞歸:使用std::function捕捉Lambda表達式的參考。透過捕獲的引用,Lambda表達式可以遞歸呼叫自身。

thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? Apr 22, 2024 pm 03:18 PM

遞歸演算法透過函數自呼叫解決結構化的問題,優點是簡潔易懂,缺點是效率較低且可能發生堆疊溢位;非遞歸演算法透過明確管理堆疊資料結構避免遞歸,優點是效率更高且避免堆疊溢出,缺點是程式碼可能更複雜。選擇遞歸或非遞歸取決於問題和實現的特定限制。

laravel和thinkphp哪個好 laravel和thinkphp哪個好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

thinkphp怎麼安裝 thinkphp怎麼安裝 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

See all articles