本文將引導您完成一種檢索所有子節點和後代節點的方法使用PHP 和MySQL 查詢結果的指定父級。這種技術消除了建構樹結構的多維數組的需要,使您能夠直接獲取所有節點。
考慮一個組織為鄰接清單的 MySQL 表,其中層次結構資料以 id、name 欄位表示和parent_id。以下 SQL 查詢可以將此表中的所有行檢索到關聯數組中:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
假設我們要過濾此數組以查找 id 為 3 的父級下的節點,包括父級本身。這個自訂的fetch_recursive 函數可以完成這個任務:
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; }
要使用此函數,將從查詢中獲得的$data 數組作為第一個參數傳遞,並將要檢索其子節點的父節點的id 傳遞為第二個參數:
$list = fetch_recursive($data, 3);
$list 現在將包含一個包含所有子節點和父節點(id 3)的關聯數組
該解決方案可以有效地檢索指定父節點的所有子節點和後代節點,而不需要建構多維樹結構。
以上是如何使用 PHP 取得 MySQL 中父節點的所有子節點和後代節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!