搜尋
首頁後端開發php教程php無限分類的圖文程式碼介紹

無限分類,是指從一個最高分類開始,每個子分類都可以分出自己的若干個子分類,可以一直分下去,稱為無限級分類;

例如一棵樹,從一根樹幹開始,分出多個樹枝,而這些樹枝又分出其他的分支,理論上是可以無限分裂下去的;

再比如,一個家庭可以有若干個子女,我們把這些子女看做是第一級分類。而這些子女,又會各自組成自己的家庭,當他們有了自己的後代,就是第二級分類,如果每個家庭都有一個以上的子女,理論上是可以無限分裂的;

在php中,無限分類的表現形式如下圖所示;

php無限分類的圖文程式碼介紹

我們同過id和pid兩個欄位來連接父級分類和子集分類,這樣就可以找到某一級分類的祖先和它的後代,例如頂級分類>華語歌手>流行歌手>流行男歌手>周杰倫;

光是做出數據還不夠,我們還需要把數據展示出來,這時候,我們就需要用到無限分類的遞歸演算法了。

這裡先解釋一下什麼是遞歸,遞歸是函數呼叫自身的一種程式設計技巧,透過呼叫自身達到循環的目的。那麼問題來了,我們為什麼不直接使用循環呢?如果直接使用循環的話,我們就沒辦法很好的解決參數的問題,特別是當處理一些複雜問題的時候,什麼情況下初始化參數,什麼情況下累加參數,都會需要額外的思考。不如遞歸的思路清晰。

看一個簡單的遞歸例子;

function test(&$b=0){
    $b++;    if($b<10){
        test($b);
    }    return $b;
}echo test();

遞歸作為循環的一種變式,那麼它也需要跳出循環的條件,或者是繼續循環的條件。這裡的&$b是參數傳遞的一種方式,指引用參數本身,透過&傳遞的參數,才會不斷累積;

#回到剛剛的分類:

$host=&#39;127.0.0.1&#39;;
$db_user=&#39;root&#39;;
$db_pass=&#39;root&#39;;
$db_name=&#39;chenbk&#39;;
$timezone="Asia/Shanghai";
$link=mysqli_connect($host,$db_user,$db_pass,$db_name);
mysqli_query($link,"SET names UTF8");
header("Content-Type: text/html; charset=utf-8");

function tree($link,&$treeList=array(),$pid = 1,$count = 0) {  //$link为数据库连接,&$treeList为输出数组,因为需要累积结果,所以加上引用
    $count+=2;    //count为识别分级深度的标识
    $result = mysqli_query($link,"SELECT * FROM chen_category WHERE parentId={$pid}");
    while ($row=mysqli_fetch_assoc($result)) {
            $row[&#39;count&#39;] = $count;
            $row[&#39;name&#39;] = str_repeat(&#39; &#39;, $count).&#39;|-&#39;.$row[&#39;name&#39;];  //通过分级深度的标识,来给分类缩进效果
            $treeList[] = $row;   //把查询到的结果存储起来                         
            tree($link,$treeList,$row[&#39;id&#39;],$count);  //再次调用自身,这时的pid为上一条数据的id从而找到上一条数据的子分类;
    }
    return $treeList;    //输出结果
}

$values=tree($link);
echo &#39;<select name="parentId" id="">&#39;;

foreach ($values as $key => $value) {
    echo &#39;<option value="&#39;.$value[&#39;id&#39;].&#39;">&#39;.$value[&#39;name&#39;].&#39;</option>&#39;;
}

echo &#39;</select>&#39;;

這個函數的運作流程為:

1.透過pid=0找到最高分類

2.給它加上層級深度,透過層級深度加上縮排效果,然後把這條資料存起來。

3.再次呼叫自身,傳入2.找出的數據,以及第一級分類的id作為下一級分類的pid;這樣,我們每次找到它的子分類,最後就會找出它最小的一級分類;

最終出現的效果是這樣的:

php無限分類的圖文程式碼介紹

我這裡把pid的預設值設為了1,所以最高分類沒有顯示出來;

至於這個演算法的排序效果,在於wilhe循環裡,調用函數自身的時候,我們第一次查出來的數據是2條,一條華語歌手,一條歐美歌手,但是,在運算的時候,函數是分層呼叫的,就像多層for迴圈一樣,會等到最內層的迴圈結束之後,才會依序完成外部的迴圈。所以我們,在查到華語歌手的時候函數沒結束,遞歸自身又找到了流行歌手,一直到,找到周杰倫之後,才開始處理它上一層的流行女歌手。根據這個流程出來的結果就完成了排序。

以上是php無限分類的圖文程式碼介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的目的:構建動態網站PHP的目的:構建動態網站Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP:處理數據庫和服務器端邏輯PHP:處理數據庫和服務器端邏輯Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

您如何防止PHP中的SQL注入? (準備的陳述,PDO)您如何防止PHP中的SQL注入? (準備的陳述,PDO)Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python:代碼示例和比較PHP和Python:代碼示例和比較Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP行動:現實世界中的示例和應用程序PHP行動:現實世界中的示例和應用程序Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:輕鬆創建交互式Web內容PHP:輕鬆創建交互式Web內容Apr 14, 2025 am 12:15 AM

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python:比較兩種流行的編程語言PHP和Python:比較兩種流行的編程語言Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP的持久相關性:它還活著嗎?PHP的持久相關性:它還活著嗎?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

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

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能