>백엔드 개발 >PHP 문제 >PHP에서 2차원 배열을 트리 구조로 변환하는 방법에 대해 이야기해 보겠습니다.

PHP에서 2차원 배열을 트리 구조로 변환하는 방법에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-04-12 13:57:08983검색

네트워크 애플리케이션이 지속적으로 개발됨에 따라 프런트엔드와 백엔드 분리를 사용하여 개발되는 웹사이트와 애플리케이션이 점점 더 많아지고 있습니다. 이는 프런트엔드 코드와 백엔드 코드를 분리하며 데이터 상호작용을 통한 통신이 필요합니다. 데이터 상호작용 과정에서 배열, 특히 2차원 배열이 자주 사용됩니다. 그렇다면 2차원 배열을 트리 구조로 변환하는 방법은 무엇일까요? 이 기사에서는 PHP에서 2차원 배열을 트리로 변환하는 방법을 공유합니다.

1. 트리 구조란

2차원 배열을 트리로 변환하는 방법을 소개하기 전에 먼저 트리 구조가 무엇인지 알아보겠습니다. 컴퓨터 과학에서 트리 구조는 n(n>0)개의 제한된 노드로 구성된 계층적 관계 집합인 비선형 데이터 구조입니다. 노드 중 하나를 루트 노드라고 하며 나머지 노드는 트리 구조의 하나 이상의 하위 트리로 볼 수 있습니다.

간단한 예를 들어 보겠습니다. 회사의 조직 구조는 최상위 수준이 총괄 관리자(루트 노드)이고 여러 부서 관리자(하위 노드)가 있습니다. 각 부서 관리자에는 여러 명의 직원(리프 노드)이 있습니다.

2. 2차원 배열을 트리 구조로 변환하는 원리

2차원 배열을 트리 구조로 변환하는 것은 일련의 평면 데이터를 내부 관계를 활용하여 트리 데이터 구조로 구성하는 것으로 볼 수 있습니다. 프로세스. 변환 프로세스는 재귀적으로 수행할 수 있습니다.

  1. 2차원 배열에서 루트 노드 데이터를 찾아 배열에서 제거한 다음 루트 노드 아래의 하위 노드를 재귀적으로 검색합니다.
  2. 전체 배열을 탐색하고 각 요소의 하위 노드를 스택에 푸시한 다음 하위 노드 아래에서 하위 노드를 재귀적으로 검색합니다.
  3. 재귀 종료 조건은 현재 배열이 비어 있거나 현재 노드의 하위 노드가 없다는 것입니다.

위의 세 단계에 따라 2차원 배열을 트리로 변환하는 기능을 구현할 수 있습니다.

3. 코드 구현

실제 예제를 사용하여 2차원 배열을 트리 구조로 변환하는 방법을 보여드리겠습니다. 다음과 같은 2차원 배열이 있다고 가정합니다.

$data = array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);

배열에는 5개의 노드가 포함되어 있습니다. 여기서 id는 노드의 고유 식별자를 나타내고, name은 노드 이름을 나타내고, pid는 노드의 상위 노드 ID를 나타냅니다.

이제 이 2차원 배열을 다음 트리 구조로 변환해야 합니다.

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 节点1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 节点2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => 节点3
                                            [children] => Array()
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [name] => 节点4
                                            [children] => Array()
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 5
            [name] => 节点5
            [children] => Array()
        )

)

구체적인 구현 프로세스는 다음과 같습니다.

function buildTree(&$data,$pid = 0){
    $tree = array();
    foreach($data as $k=>$v){
        if($v['pid'] == $pid){
            $temp = $v;
            $temp['children'] = buildTree($data,$v['id']);
            $tree[] = $temp;
            unset($data[$k]);
        }
    }
    return $tree;
}

$data =    array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);
print_r(buildTree($data));

위 코드에서 buildTree 함수는 먼저 빈 배열 $tree를 인스턴스화한 다음 전체 $data 배열을 순회하고 pid $pid가 있는 모든 데이터를 $tree 배열에 저장하고 $pid 아래의 모든 하위 노드를 재귀적으로 검색한 다음 $tree 배열을 반환합니다. $data 배열이 비어 있거나 현재 노드의 하위 노드가 없으면 재귀가 종료됩니다.

4. 요약

위의 코드를 통해 2차원 배열을 트리 구조로 변환하는 과정이 매우 간단하다는 것을 알 수 있습니다. 모든 노드를 차례로 트리 구조로 구성하려면 재귀만 사용하면 됩니다. 이는 웹 개발 시 데이터 처리 및 표시에 매우 유용하며 다양한 시나리오에서 데이터 표시 및 데이터 구조 구성의 다양한 기능을 실현할 수 있습니다.

위 내용은 PHP에서 2차원 배열을 트리 구조로 변환하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.