PHP實(shí)現(xiàn)無限極分類生成分類樹的方法
本文實(shí)例講述了PHP實(shí)現(xiàn)無限極分類生成分類樹的方法。分享給大家供大家參考,具體如下:
現(xiàn)在的分類數(shù)據(jù)庫設(shè)計(jì)基本都是:每一個(gè)分類有一個(gè)id主鍵字段,一個(gè)pid指向父類的id,這樣便可實(shí)現(xiàn)無限級(jí)分類,取出的數(shù)據(jù)就是如下的格式:
$arr = array( array("id" => 1 , "pid" => 0 , 'cat' => '欄目一'), array("id" => 2 , "pid" => 0 , 'cat' => '欄目二'), array("id" => 3 , "pid" => 1 , 'cat' => '欄目三'), array("id" => 4 , "pid" => 2 , 'cat' => '欄目四'), array("id" => 5 , "pid" => 1 , 'cat' => '欄目五'), array("id" => 6 , "pid" => 5 , 'cat' => '欄目六'), array("id" => 7 , "pid" => 5 , 'cat' => '欄目七'), array("id" => 8 , "pid" => 6 , 'cat' => '欄目八'), array("id" => 9 , "pid" => 1 , 'cat' => '欄目九'), array("id" => 10 , "pid" => 0 , 'cat' => '欄目十'), array("id" => 11 , "pid" => 10 , 'cat' => '欄目十一'), array("id" => 12 , "pid" => 11 , 'cat' => '欄目十二'), array("id" => 13 , "pid" => 2 , 'cat' => '欄目十三'), array("id" => 14, "pid" => 13 , 'cat' => '欄目十四') );
不多說,直接上處理代碼:
//生成無限極分類樹 function make_tree($arr){ $refer = array(); $tree = array(); foreach($arr as $k => $v){ $refer[$v['id']] = & $arr[$k]; //創(chuàng)建主鍵的數(shù)組引用 } foreach($arr as $k => $v){ $pid = $v['pid']; //獲取當(dāng)前分類的父級(jí)id if($pid == 0){ $tree[] = & $arr[$k]; //頂級(jí)欄目 }else{ if(isset($refer[$pid])){ $refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父級(jí)欄目,則添加進(jìn)父級(jí)欄目的子欄目數(shù)組中 } } } return $tree; }
測(cè)試運(yùn)行:
$cat = make_tree($arr); print_r($cat);
運(yùn)行結(jié)果:
Array ( [0] => Array ( [id] => 1 [pid] => 0 [cat] => 欄目一 [subcat] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [cat] => 欄目三 ) [1] => Array ( [id] => 5 [pid] => 1 [cat] => 欄目五 [subcat] => Array ( [0] => Array ( [id] => 6 [pid] => 5 [cat] => 欄目六 [subcat] => Array ( [0] => Array ( [id] => 8 [pid] => 6 [cat] => 欄目八 ) ) ) [1] => Array ( [id] => 7 [pid] => 5 [cat] => 欄目七 ) ) ) [2] => Array ( [id] => 9 [pid] => 1 [cat] => 欄目九 ) ) ) [1] => Array ( [id] => 2 [pid] => 0 [cat] => 欄目二 [subcat] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [cat] => 欄目四 ) [1] => Array ( [id] => 13 [pid] => 2 [cat] => 欄目十三 [subcat] => Array ( [0] => Array ( [id] => 14 [pid] => 13 [cat] => 欄目十四 ) ) ) ) ) [2] => Array ( [id] => 10 [pid] => 0 [cat] => 欄目十 [subcat] => Array ( [0] => Array ( [id] => 11 [pid] => 10 [cat] => 欄目十一 [subcat] => Array ( [0] => Array ( [id] => 12 [pid] => 11 [cat] => 欄目十二 ) ) ) ) ) )
如果大家需要這樣的組裝格式,或者需要該格式方便后續(xù)的處理,可以嘗試此方法
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php采集內(nèi)容中帶有圖片地址的遠(yuǎn)程圖片并保存的方法
這篇文章主要介紹了php采集內(nèi)容中帶有圖片地址的遠(yuǎn)程圖片并保存的方法,可實(shí)現(xiàn)采集并保存遠(yuǎn)程圖片的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2015-01-01php jquery 實(shí)現(xiàn)新聞標(biāo)簽分類與無刷新分頁
php + jquery ui插件 + jquery pager插件 實(shí)現(xiàn)新聞的 標(biāo)簽分類 + 無刷新分頁2009-12-12PHP封裝PDO實(shí)現(xiàn)操作MySql數(shù)據(jù)庫
數(shù)據(jù)庫操作類可以封裝數(shù)據(jù)庫連接和操作,使代碼更易于維護(hù)和擴(kuò)展,這篇文章主要為大家詳細(xì)介紹了PHP如何封裝操作類PDO從而實(shí)現(xiàn)操作MySql數(shù)據(jù)庫的功能,需要的可以了解下2023-10-10php中常量DIRECTORY_SEPARATOR用法深入分析
這篇文章主要介紹了php中常量DIRECTORY_SEPARATOR用法深入分析,涉及針對(duì)Linux路徑分隔符不支持\的情況,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11