使用PHP 和MySQL 查詢結果獲取父級下的所有子節點、孫節點等
原始問題:
檢索與父節點關聯的所有子節點、孫子節點和後續後代節點是使用分層資料結構時的常見任務。這個問題出現在資料庫表採用鄰接表模型進行資料組織的場景。
使用遞歸的方法:
為了解決這個問題,遞歸被證明是一種有效的方法方法。以下是如何使用遞歸來實現此目標的詳細說明:
1.建立基本函數:
遞歸函數是一種呼叫自身來解決問題的函數,通常用於涉及分層或嵌套資料結構的場景。在本例中,我們的基底函數將命名為 fetch_recursive.
2。決定遞歸呼叫的標準:
在 fetch_recursive中,兩個主要條件決定何時進行遞歸呼叫:
1。的遞歸性質確保它會自動遍歷層次結構,不僅檢索子節點,還檢索孫子和後續後代。 。 🎜>
用法:
要使用 fetch_recursive 函數,只需傳遞原始資料數組(在本例中為 $data)和要從中檢索後代的節點的 ID。例如,要擷取節點 3 下的所有子節點、孫節點和後代節點:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
這將使用包含所有相關節點的陣列填入 $list 變數。
以上是如何使用 PHP 和 MySQL 查詢結果來擷取父節點下的所有子節點、孫節點和後代節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!