要有效地表示分層數據,請考慮使用閉包表。在這種情況下,閉包表維護樹結構的祖先和後代之間的關係,從而可以有效地檢索和表示層次結構。
要查詢樹結構,我們可以執行 SQL 查詢來檢索給定節點的後代及其在層次結構中的層級。以下是一個檢索指定層級的後代的範例查詢:
SELECT d.*, p.a AS '_parent' FROM longnames AS a JOIN closure AS c ON (c.a = a.tsn) JOIN longnames AS d ON (c.d = d.tsn) LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1) WHERE a.tsn = ? AND c.l <= ? ORDER BY c.l;
檢索到查詢結果後,我們可以處理它們以建立分層數組結構。這涉及按層次結構對行進行排序並相應地對它們進行分組,並建立一個包含節點作為物件的數組,其中包含資料和子數組。
為了增強數組結構,我們可以建立自訂 Row 對象,包含行資料的關聯數組及其子項的 Rowset 對象。葉節點的子行集為空。
自訂類別也可以包含toArrayDeep() 等方法,將其資料內容遞歸地轉換為普通數組,從而輕鬆匯出資料.
要使用此系統,可以先取得分類表資料閘道的實例,然後取得所需的樹狀結構:
// Get an instance of the taxonomy table data gateway $tax = new Taxonomy(); // Query tree starting at Rodentia (id 180130), to a depth of 2 $tree = $tax->fetchTree(180130, 2); // Dump out the array var_export($tree->toArrayDeep());
要確定每個路徑的深度,您可以將新節點插入到Closure 表中,根據它們在層次結構中的新增位置計算適當的層級。 LAST_INSERT_ID() 函數可用來取得新插入節點的 ID。
以上是如何將資料庫結果轉換為分層數組物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!