Rumah  >  Artikel  >  pembangunan bahagian belakang  >  php如何实现分类树状的效果?(附代码)

php如何实现分类树状的效果?(附代码)

不言
不言asal
2018-08-13 15:06:581505semak imbas

本篇文章给大家带来的内容是关于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实现万年历的完整代码

Atas ialah kandungan terperinci php如何实现分类树状的效果?(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn