在這個問題中,我們的任務是將元素的平面數組轉換為分層樹狀結構。輸入數組由具有三個屬性的物件組成:id、parentid 和 name。輸出應該是一個樹狀結構,其中每個節點代表輸入數組中的一個元素,並具有屬於它的子節點列表。
為了解決這個問題,我們不能依賴像巢狀集合這樣的方法,因為資料庫限制。相反,我們利用遞歸演算法來建構樹。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
第一步,我們循環遍歷輸入數組並按其parentid對元素進行分組以創建一個新數組,其中每個鍵代表父級的id ,該值是其子級的數組。隨後,我們呼叫輔助函數 createTree 來遞歸地建構樹。
1 2 3 4 5 6 7 8 9 10 |
|
createTree 函數有兩個參數:重新組織的陣列 $list 和表示樹中目前層級的陣列 $parent。在函數中,我們迭代 $parent 陣列並檢查 $list 是否包含當前元素的任何子元素。如果找到子元素,我們會遞歸呼叫 createTree 來建立該元素的子樹,並將其新增為目前元素的 Children 屬性。最後,我們將目前元素追加到 $tree 陣列並傳回樹。
透過遵循此演算法,我們可以從提供的陣列列表有效地建構樹結構,產生之間的層次關係的嵌套表示元素。
以上是如何有效率地將平面數組列表轉換為層次樹結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!