首頁  >  文章  >  資料庫  >  如何將資料庫結果轉換為分層數組物件?

如何將資料庫結果轉換為分層數組物件?

Barbara Streisand
Barbara Streisand原創
2024-11-06 17:04:03649瀏覽

How to Convert Database Results into Hierarchical Array Objects?

將資料庫結果轉換為分層數組物件

實現基於閉包表的層次結構

要有效地表示分層數據,請考慮使用閉​​包表。在這種情況下,閉包表維護樹結構的祖先和後代之間的關係,從而可以有效地檢索和表示層次結構。

查詢分層資料

要查詢樹結構,我們可以執行 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() 方法

自訂類別也可以包含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中文網其他相關文章!

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