PHP에서 분류 트리 효과를 얻는 방법은 무엇입니까? (코드 포함)

不言
풀어 주다: 2023-04-03 18:36:01
원래의
1527명이 탐색했습니다.

이 글의 내용은 PHP에서 분류 트리 효과를 얻는 방법에 관한 것입니다. (코드 첨부) 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

가끔 계층적 조직 관계를 한눈에 볼 수 있도록 분류된 데이터를 트리 형태로 표시해야 하는 경우가 있습니다. 구현 방법은 다음과 같습니다.

참고: 제가 말하는 분류는 인피니투스(Infinitus) 분류입니다. , 다음 함수와 관련된 테이블에는 id pid name의 세 가지 필드 이름이 있습니다. 정의된 이름이 다른 경우 분류 목록 데이터를 쿼리할 때 id pid 이름에 해당하는 별칭을 필드에 지정하십시오. 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을 어떻게 생성하나요? json을 생성하는 PHP용 메소드 코드

php는 비트 연산을 사용하여 정수의 덧셈, 뺄셈, 곱셈, 나눗셈을 구현하고 테스트(코드 예제)

영구 달력을 구현하는 PHP용 전체 코드

위 내용은 PHP에서 분류 트리 효과를 얻는 방법은 무엇입니까? (코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿