> 백엔드 개발 > PHP 튜토리얼 > 평면 배열 목록을 계층적 트리 구조로 효율적으로 변환하는 방법은 무엇입니까?

평면 배열 목록을 계층적 트리 구조로 효율적으로 변환하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-29 14:41:10
원래의
617명이 탐색했습니다.

How to Efficiently Convert a Flat Array List into a Hierarchical Tree Structure?

배열 목록을 트리 구조로 변환

이 문제에서는 요소의 평면 배열을 계층적 트리 구조로 변환하는 작업을 맡습니다. 입력 배열은 id, parentid 및 name이라는 세 가지 속성을 가진 객체로 구성됩니다. 출력은 각 노드가 입력 배열의 요소를 나타내고 이에 속하는 하위 노드 목록을 갖는 트리 구조여야 합니다.

이 문제를 해결하려면 중첩 세트와 같은 방법에 의존할 수 없습니다. 데이터베이스 제약. 대신 재귀 알고리즘을 활용하여 트리를 구축합니다.

$arr = array(
    array('id' => 100, 'parentid' => 0, 'name' => 'a'),
    array('id' => 101, 'parentid' => 100, 'name' => 'a'),
    array('id' => 102, 'parentid' => 101, 'name' => 'a'),
    array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a) {
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));
로그인 후 복사

첫 번째 단계에서는 입력 배열을 반복하고 상위 ID별로 요소를 그룹화하여 각 키가 상위 ID를 나타내는 새 배열을 만듭니다. 이며 값은 해당 하위 항목의 배열입니다. 그런 다음 도우미 함수 createTree를 호출하여 트리를 재귀적으로 생성합니다.

function createTree(&$list, $parent) {
    $tree = array();
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}
로그인 후 복사

createTree 함수는 재구성된 배열 $list와 트리의 현재 수준을 나타내는 배열 $parent라는 두 가지 매개 변수를 사용합니다. 함수 내에서 $parent 배열을 반복하고 $list에 현재 요소에 대한 하위 항목이 포함되어 있는지 검사합니다. 하위 항목이 발견되면 createTree를 반복적으로 호출하여 해당 요소에 대한 하위 트리를 구축하고 이를 현재 요소의 하위 속성으로 추가합니다. 마지막으로, 현재 요소를 $tree 배열에 추가하고 트리를 반환합니다.

이 알고리즘을 따르면 제공된 배열 목록에서 트리 구조를 효율적으로 구성하여 사이의 계층 관계에 대한 중첩 표현을 생성할 수 있습니다. 요소.

위 내용은 평면 배열 목록을 계층적 트리 구조로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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