> 백엔드 개발 > PHP 튜토리얼 > PHP의 평면 배열에서 계층적 트리 구조를 구축하는 방법은 무엇입니까?

PHP의 평면 배열에서 계층적 트리 구조를 구축하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-27 18:33:15
원래의
275명이 탐색했습니다.

How to Build a Hierarchical Tree Structure from a Flat Array in PHP?

PHP에서 평면 배열로 트리 구조 구축

문제:

'id' 및 'parent_id' 필드가 있는 요소로 구성된 평면 배열(각 요소는 최대 하나의 상위 요소를 가질 수 있음) 그리고 0개 이상의 자식. 'parent_id'가 0이면 요소는 루트 수준 항목입니다. 목표는 이 평면 배열을 하위-상위 관계가 있는 계층적 트리로 재구성하는 것입니다.

해결책:

제공된 함수인 buildTree()가 이 작업을 효과적으로 수행합니다. 입력 배열을 반복하고 트리 구조를 재귀적으로 구축합니다. 출력 트리의 각 요소에는 해당 ID, 상위 ID 및 하위 요소 배열이 포함됩니다.

구현:

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;
            unset($elements[$element['id']]);
        }
    }

    return $branch;
}
로그인 후 복사

'설정 해제' 호출:

위 코드에서 unset() 호출은 계층 구조. 원래 입력 배열에서 처리된 요소를 제거하여 요소가 트리에서 중복되지 않도록 합니다.

예:

제공된 입력 배열을 고려하세요.

[_319_] => [...],
[_320_] => [...],
[_321_] => [...],
[_322_] => [...],
[_323_] => [...],
[_324_] => [...],
[_325_] => [...]
로그인 후 복사

처리 후 출력 트리는 부모-자식을 유지합니다. 관계:

[_319_] => [...],
[_320_] => [
    'id' => '_320_',
    'parent_id' => 0,
    'children' => [
        [_321_] => [...],
        [_325_] => [...]
    ]
],
[_323_] => [
    'id' => '_323_',
    'parent_id' => 0,
    'children' => [
        [_324_] => [...]
    ]
]
로그인 후 복사

따라서 buildTree() 함수를 사용하면 부모-자식 관계가 있는 요소의 단순 배열을 PHP의 구조화된 계층 트리로 변환할 수 있습니다.

위 내용은 PHP의 평면 배열에서 계층적 트리 구조를 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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