이 문제에서는 요소의 평면 배열을 계층적 트리 구조로 변환하는 작업을 맡습니다. 입력 배열은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!