Home  >  Article  >  Backend Development  >  How to achieve classification tree effect in php? (with code)

How to achieve classification tree effect in php? (with code)

不言
不言Original
2018-08-13 15:06:581457browse

The content of this article is about how to achieve the classification tree effect in PHP? (Attached is the code), which has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Sometimes we need to display classified data in a tree-like effect so that we can see the hierarchical organizational relationship at a glance. The implementation is as follows:

Note: The classification I am talking about is Infinitus classification. , there are three table field names involved in the following function: id pid name. If the defined names are different, please give the field an alias corresponding to the id pid name when querying the classification list data. For example, if your pid table field name is defined as parent_id, then query Give the field an alias of "parent_id as pid ";

The function is as follows:

/**
 * $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;
}

Usage example:

<?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>

Effect:

Related recommendations:

How does php generate json? PHP generates json method code

php uses bit operations to implement addition, subtraction, multiplication and division of integers and tests (code example)

php implements perpetual calendar Complete code

The above is the detailed content of How to achieve classification tree effect in php? (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn