本篇文章給大家帶來的內容是關於php如何?分類樹狀的效果?(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
我們有時候需要將分類資料按樹狀效果展示出來,能一眼就看出來層級的組織關係,實現如下:
注意:我所講的分類為無限極分類 ,如下的函數所涉及的表欄位名有三個 id pid name ,如果有定義名稱不同請查詢分類列表資料時對應給欄位取別名對應上 id pid name ,比如 你的pid 表欄位名定義為 parent_id 那麼查詢時 給該欄位取別名為 "parent_id as pid ";
函數如下:
/** * $list 為查詢 出來的二維數組 **/function getTree($list,$pid=0,$itemprefix = '') {static $icon = array('│', '├', '└'); static $nbsp = " ";static $arr = array(); $number = 1; foreach($list as $row) { if($row['pid'] == $pid) { $brotherCount = 0; //判斷當前有多少個兄弟分類 foreach($list as $r) { if($row['pid'] == $r['pid']) { $brotherCount++; } } if($brotherCount >0) { $j = $k = ''; if($number == $brotherCount) { $j .= $icon[2]; $k = $itemprefix ? $nbsp : ''; }else{ $j .= $icon[1]; $k = $itemprefix ? $icon[0] : ''; } $spacer = $itemprefix ? $itemprefix . $j : ''; $row['name'] = $spacer.$row['name']; $arr[] = $row; $number++; getTree($list,$row['id'],$itemprefix . $k . $nbsp); } } } return $arr;}
使用樣本:
<?php header("Content-type:text/html;Charset=utf8");function getTree($list,$pid=0,$itemprefix = '') {static $icon = array('│', '├', '└'); static $nbsp = " ";static $arr = array(); $number = 1; foreach($list as $row) { if($row['pid'] == $pid) { $brotherCount = 0; //判斷當前有多少個兄弟分類 foreach($list as $r) { if($row['pid'] == $r['pid']) { $brotherCount++; } } if($brotherCount >0) { $j = $k = ''; if($number == $brotherCount) { $j .= $icon[2]; $k = $itemprefix ? $nbsp : ''; }else{ $j .= $icon[1]; $k = $itemprefix ? $icon[0] : ''; } $spacer = $itemprefix ? $itemprefix . $j : ''; $row['name'] = $spacer.$row['name']; $arr[] = $row; $number++; getTree($list,$row['id'],$itemprefix . $k . $nbsp); } } } return $arr;}//$list 類比資料庫查詢出來的資料$list = array();$list = [['id'=>1,'pid'=>0,'name'=>'總經理'],['id'=>9,'pid'=>7,'name'=>'人事二組職員2'],['id'=>2,'pid'=>1,'name'=>'人事部經理'],['id'=>3,'pid'=>2,'name'=>'人事一組長'],['id'=>13,'pid'=>12,'name'=>'技術一組職員1'],['id'=>4,'pid'=>3,'name'=>'人事一組職員1'],['id'=>5,'pid'=>3,'name'=>'人事一組職員2'],['id'=>6,'pid'=>3,'name'=>'人事一組職員3'],['id'=>7,'pid'=>2,'name'=>'人事二組長'],['id'=>8,'pid'=>7,'name'=>'人事二組職員1'],['id'=>10,'pid'=>7,'name'=>'人事二組職員3'],['id'=>15,'pid'=>12,'name'=>'技術一組職員3'],['id'=>11,'pid'=>1,'name'=>'技術部經理'],['id'=>12,'pid'=>11,'name'=>'技術一組長'],['id'=>14,'pid'=>12,'name'=>'技術一組職員2'],];//執行函數$list = getTree($list);?> <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>層級下拉式清單效果</title><select name="" id=""><?php foreach($list as $row): ?><option value=""> <?php echo $row['name']; ?></option><?php endforeach;?></select></head><body></body></html>
效果: