首頁 >後端開發 >php教程 >php如何實現分類樹狀的效果? (附代碼)

php如何實現分類樹狀的效果? (附代碼)

不言
不言原創
2018-08-13 15:06:581542瀏覽

本篇文章帶給大家的內容是關於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 = &#39;&#39;) {
	static $icon = array(&#39;│&#39;, &#39;├&#39;, &#39;└&#39;);
    static $nbsp = " ";
	static $arr = array();
    $number = 1;
    foreach($list as $row) {
    	if($row[&#39;pid&#39;] == $pid) {
    		$brotherCount = 0;
    		//判断当前有多少个兄弟分类
    		foreach($list as $r) {
    			if($row[&#39;pid&#39;] == $r[&#39;pid&#39;]) {
    				$brotherCount++;
    			}
    		}
    		if($brotherCount >0) {
    			$j = $k = &#39;&#39;;
    			if($number == $brotherCount) {
    				$j .= $icon[2];
                    $k = $itemprefix ? $nbsp : &#39;&#39;;
    			}else{
                    $j .= $icon[1];
                    $k = $itemprefix ? $icon[0] : &#39;&#39;;
    			}
    			$spacer = $itemprefix ? $itemprefix . $j : &#39;&#39;;
    			$row[&#39;name&#39;] = $spacer.$row[&#39;name&#39;];
    			$arr[] = $row;
    			$number++;
    			getTree($list,$row[&#39;id&#39;],$itemprefix . $k . $nbsp);
    		}
    	}
    }
    return  $arr;
}

//$list 模拟数据库查询出来的数据
$list = array();
$list = [
	[&#39;id&#39;=>1,&#39;pid&#39;=>0,&#39;name&#39;=>&#39;总经理&#39;],
	[&#39;id&#39;=>9,&#39;pid&#39;=>7,&#39;name&#39;=>&#39;人事二组职员2&#39;],
	[&#39;id&#39;=>2,&#39;pid&#39;=>1,&#39;name&#39;=>&#39;人事部经理&#39;],
	[&#39;id&#39;=>3,&#39;pid&#39;=>2,&#39;name&#39;=>&#39;人事一组长&#39;],
	[&#39;id&#39;=>13,&#39;pid&#39;=>12,&#39;name&#39;=>&#39;技术一组职员1&#39;],
	[&#39;id&#39;=>4,&#39;pid&#39;=>3,&#39;name&#39;=>&#39;人事一组职员1&#39;],
	[&#39;id&#39;=>5,&#39;pid&#39;=>3,&#39;name&#39;=>&#39;人事一组职员2&#39;],
	[&#39;id&#39;=>6,&#39;pid&#39;=>3,&#39;name&#39;=>&#39;人事一组职员3&#39;],
	[&#39;id&#39;=>7,&#39;pid&#39;=>2,&#39;name&#39;=>&#39;人事二组长&#39;],
	[&#39;id&#39;=>8,&#39;pid&#39;=>7,&#39;name&#39;=>&#39;人事二组职员1&#39;],
	[&#39;id&#39;=>10,&#39;pid&#39;=>7,&#39;name&#39;=>&#39;人事二组职员3&#39;],
	[&#39;id&#39;=>15,&#39;pid&#39;=>12,&#39;name&#39;=>&#39;技术一组职员3&#39;],
	[&#39;id&#39;=>11,&#39;pid&#39;=>1,&#39;name&#39;=>&#39;技术部经理&#39;],
	[&#39;id&#39;=>12,&#39;pid&#39;=>11,&#39;name&#39;=>&#39;技术一组长&#39;],
	[&#39;id&#39;=>14,&#39;pid&#39;=>12,&#39;name&#39;=>&#39;技术一组职员2&#39;],
];
//执行函数
$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[&#39;name&#39;]; ?></option>
		<?php endforeach;?>
	</select>
</head>
<body>
	
</body>
</html>

效果:

#相關推薦:

php如何產生json? php產生json的方法代碼

php使用位元運算實現整數的加減乘除並測試(程式碼範例)

php實作萬年曆的完整程式碼

以上是php如何實現分類樹狀的效果? (附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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