> PHP 프레임워크 > ThinkPHP > ThinkPHP6을 사용하여 재귀 트리 구조 구현

ThinkPHP6을 사용하여 재귀 트리 구조 구현

王林
풀어 주다: 2023-06-20 14:48:10
원래의
1136명이 탐색했습니다.

인터넷의 발달과 함께 분류 디렉토리, 인사 조직 구조, 권한 관리 등 다양한 웹사이트와 애플리케이션에 트리 구조의 디스플레이가 등장했습니다. 이러한 애플리케이션 시나리오에서 재귀 트리 구조는 매우 중요하고 실용적인 모델 중 하나가 되었습니다.

ThinkPHP6는 MVC 모델을 기반으로 한 PHP 개발 프레임워크로, 풍부한 확장 라이브러리와 뛰어난 성능을 갖추고 있으며, ThinkPHP6에서 재귀 트리 구조를 구현하는 데에도 더욱 편리해졌습니다.

아래에서는 ThinkPHP6에서 재귀 함수를 사용하여 트리 구조를 구축하는 방법을 소개하겠습니다.

1. 데이터베이스 구조 정의

재귀 트리 구조를 구현하기 전에 먼저 애플리케이션이 데이터를 처리할 수 있도록 데이터베이스에 데이터를 저장하는 방법을 알아야 합니다. 이 예에서는 "카테고리" 테이블을 생성하고 카테고리 이름, 카테고리 ID, 상위 ID 등과 같은 정보를 카테고리 테이블에 저장합니다.

분류 테이블 구조는 다음과 같습니다.

id int(11) 기본 키
name varchar(50) 카테고리 이름
parent_id int(11) 상위 카테고리 ID

2 재귀 함수 구현

다음으로 필요합니다. 루트 노드부터 시작하여 모든 하위 노드를 쿼리하는 데 사용되는 재귀 함수를 구현합니다. ThinkPHP6에서는 $where 매개변수와 결합된 select 메소드를 사용하여 지정된 열을 쿼리할 수 있습니다. 예:

Db::name('classification table')->where('parent_id',$id)-> select ();

이 예에서 $id는 재귀 함수에 전달되는 매개 변수이며 현재 노드의 ID를 나타냅니다. 재귀 함수는 ID를 기반으로 노드의 모든 하위 노드를 재귀적으로 쿼리합니다.

다음은 재귀 함수의 구현입니다.

function getChildren($id){
    //查询该节点下的所有子节点
    $children=Db::name('分类表')->where('parent_id',$id)->select();
    //如果没有子节点,返回空数组
    if(empty($children)){
        return $children;
    }
    //递归查询子节点的子节点,并将结果合并到$children数组中
    foreach($children as $k=>$v){
        $children[$k]['children']=$this->getChildren($v['id']);
    }
    return $children;
} 
로그인 후 복사

이 함수에서는 먼저 이 노드 아래의 모든 하위 노드를 쿼리하고 결과를 $children 배열에 저장합니다. 노드에 하위 노드가 없으면 빈 배열이 직접 반환됩니다.

다음으로 foreach 루프를 사용하여 $children 배열의 각 하위 노드를 반복하고 재귀 함수를 호출하여 해당 하위 노드의 모든 하위 노드를 쿼리합니다. 결과를 $children 배열로 병합하여 결국 전체 $children 배열을 반환합니다.

3. 출력 트리 구조

재귀 함수가 노드와 모든 하위 노드의 정보를 얻은 후에는 이를 트리 구조로 출력해야 합니다. 이는 재귀 함수에 의해 반환된 배열을 반복하고 각 노드의 깊이에 따라 해당 들여쓰기 기호를 출력함으로써 달성될 수 있습니다.

다음은 트리 구조를 출력하는 코드입니다.

function outputTree($arr,$deep=0){
    //定义缩进符号
    $symbol='|--';
    $html='';
    
    foreach($arr as $v){
        //根据节点深度输出缩进符号
        $html.=str_repeat('       ',$deep).$symbol.$v['name'].'<br/>';
        //如果有子节点,继续遍历
        if(!empty($v['children'])){
            $html.=$this->outputTree($v['children'],$deep+1);
        }
    }
    
    return $html;
}
로그인 후 복사

이 함수에서는 먼저 들여쓰기 기호를 정의한 다음 배열의 각 노드를 재귀적으로 순회합니다. 현재 노드의 깊이를 기준으로 해당 개수의 들여쓰기 기호를 출력합니다. 노드에 하위 노드가 있는 경우 해당 노드의 모든 하위 노드를 계속 재귀적으로 순회합니다.

마지막으로 전체 트리 구조를 출력하는 코드는 다음과 같습니다.

$id=0;
$arr=$this->getChildren($id);
$html=$this->outputTree($arr);
echo $html;
로그인 후 복사

이 코드에서 $id는 루트 노드의 ID를 나타냅니다. 먼저 재귀 함수를 호출하여 모든 하위 노드의 정보를 가져옵니다. 트리 구조를 출력하는 함수를 호출하고 전체 트리 구조를 HTML 페이지로 출력합니다.

4. 요약

ThinkPHP6의 풍부한 확장 라이브러리와 재귀 기능을 사용하면 재귀 트리 구조를 쉽게 구축할 수 있어 애플리케이션을 더 쉽게 관리하고 사용할 수 있습니다. 이 기사가 트리 구조를 구축할 때 개발 작업에 도움이 되어 작업을 보다 효율적으로 완료할 수 있기를 바랍니다.

위 내용은 ThinkPHP6을 사용하여 재귀 트리 구조 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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