本文將引導您完成一種檢索所有子節點和後代節點的方法使用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)。
此解決方案有效地檢索所有指定父節點的子節點和後代節點,無需建立多維樹結構。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3