首頁 >後端開發 >php教程 >如何有效率地將陣列列表轉換為層次樹結構?

如何有效率地將陣列列表轉換為層次樹結構?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-04 14:21:10165瀏覽

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

從數組列表建立數組樹

如果您有一個具有層次關係的元素列表,請將其轉換為樹狀結構結構可能至關重要。在處理需要高效組織和檢索的複雜資料時,這種轉換特別有用。

以以下列表為例:

[
  {id: 100, parentId: 0, name: 'a'},
  {id: 101, parentId: 100, name: 'a'},
  {id: 102, parentId: 101, name: 'a'},
  {id: 103, parentId: 101, name: 'a'},
]

目標是將這個清單重新組織為分層結構樹結構,其中每個元素都有對其父元素及其子元素(如果有)的引用。

以下程式碼示範了完成此轉換的一種有效方法snippet:

<?php

$arr = [
    ['id' => 100, 'parentId' => 0, 'name' => 'a'],
    ['id' => 101, 'parentId' => 100, 'name' => 'a'],
    ['id' => 102, 'parentId' => 101, 'name' => 'a'],
    ['id' => 103, 'parentId' => 101, 'name' => 'a'],
];

$new = [];
foreach ($arr as $a) {
    $new[$a['parentId']][] = $a;
}
$tree = createTree($new, [$arr[0]]);
print_r($tree);

function createTree(&$list, $parent) {
    $tree = [];
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}

此程式碼透過根據元素的parentId 對元素進行分組來有效地處理輸入清單。然後,它遞歸地建構樹結構,用其子元素填滿每個元素。生成的樹提供了原始清單的分層表示,使基於父子關係​​的導航和檢索資料變得更加容易。

以上是如何有效率地將陣列列表轉換為層次樹結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn