大概步驟以下:
step1:到數據庫取數據,放到一個數組,
step2:把數據轉化爲一個樹型狀的數組,
step3:把這個樹型狀的數組轉爲html代碼。
也能夠將第二步和第三步合爲一步。
詳細以下:
一、數據庫設計:php
二、到數據庫取數據,放到數組:css
我用的tp5html
只展現部分核心代碼數據庫
$menu=new Menu(); $data=$menu->selects();
總之無論用什麼方法把數據取出來就行數組
取出的數據格式就是這種原生的數組安全
三、把上一步的數據轉爲樹型狀的數組代碼以下:數據庫設計
public function getMenu($data,$pid,$deep=0) { //static $tree=array(); $tree=''; foreach ($data as $row) { if($row['parentid']==$pid){ $row['deep']=$deep; $row['parentid']=$this->getMenu($data,$row['id'],$deep+1); $tree[]=$row; //$this->getMenu($data,$row['id'],$deep+1); } } return $tree; }
$deep 在這裏沒啥用,表明樹的深度函數
最後輸出$tree的數據格式爲:oop
四、把樹型狀數組轉爲html代碼以下:學習
function procHtml($menus) { $html = ''; if(is_array($menus)) { foreach ($menus as $t) { if ($t['parentid'] == '') { $html .= "<li>{$t['name']}</li>"; } else { $html .= "<li>" . $t['name']; $html .= procHtml($t['parentid']); $html = $html . "</li>"; } } } return $html ? '<ul>'.$html.'</ul>' : $html ; } echo procHtml($menus);
該函數跟上一步的代碼在一個類的同一個方法內
輸出的html的代碼格式爲:
<ul>
<li>往事如風</li>
<li>水煮三國</li>
<li>技術學習
<ul>
<li>html</li>
<li>css</li>
<li>php
<ul>
<li>php基礎知識</li>
<li>oop</li>
<li>php安全</li>
public function getTree($data,$pid) { $html=''; foreach($data as $row) { if($row['parentid']==$pid) { //父親找兒子 $html.="<li>".$row['name']; $html.=$this->getTree($data,$row['id']); $html=$html."</li>"; } } return $html?'<ul>'.$html.'</ul>':$html; }
推薦用這種,比較簡潔,此處的$data 就是從數據庫直接取出的數據
六、最後能夠再加點css樣式(我沒加css),效果以下:
此文檔適合tp5開發的人員參考