>백엔드 개발 >PHP 튜토리얼 >PHP의 평면 배열에서 트리 구조를 효율적으로 구축하려면 어떻게 해야 합니까?

PHP의 평면 배열에서 트리 구조를 효율적으로 구축하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-02 15:33:15734검색

How Can I Efficiently Build a Tree Structure from a Flat Array in PHP?

PHP의 평면 배열에서 트리 구축

PHP에서는 평면 배열에서 트리 데이터 구조를 구축하는 것이 어려울 수 있습니다. . 그러나 이 작업은 재귀를 적용하고 평면 배열 내의 부모-자식 관계를 이해함으로써 단순화될 수 있습니다.

각 요소가 'id'와 'parent_id'를 갖는 평면 배열이 주어지면 목표는 다음과 같습니다. 계층적 트리로 변환하는 것입니다. 결과 트리의 각 요소에는 하위 요소가 있는 경우 'children' 속성이 있어야 합니다.

해결책

제공된 코드는 트리를 재귀적으로 생성하려고 시도하지만 브랜치에 요소를 추가한 후 요소를 제거하지 못하여 동일한 요소의 복사본이 여러 개 생성됩니다. 이 문제를 해결하려면 해당 요소를 브랜치에 추가한 후 플랫 배열에서 제거해야 합니다.

function buildTree(array &$elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[$element['id']] = $element;
            unset($elements[$element['id']]);
        }
    }

    return $branch;
}

설명

  1. 배열, 지정된 상위 ID를 가진 요소를 확인합니다.
  2. 일치하는 요소가 발견되면 이를 변수에 할당하고 자식을 모으기 위해 재귀합니다.
  3. 요소에 자식이 있는 경우 해당 자식을 현재 요소의 'children' 속성에 할당합니다.
  4. 브랜치에 요소를 추가한 후 브랜치에서 해당 요소를 제거합니다. 중복을 방지하기 위해 평면 배열을 사용합니다.
  5. 전체 트리가 빌드될 때까지 이 프로세스를 재귀적으로 계속합니다.

결과 배열은 하위 배열을 중첩 배열로 포함하는 각 노드가 있는 계층적 트리가 되며 원래 평면 배열의 상위-하위 관계를 명확하게 표현합니다.

위 내용은 PHP의 평면 배열에서 트리 구조를 효율적으로 구축하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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