如何使用 PHP 取得 MySQL 中父節點的所有子節點和後代節點?

Barbara Streisand
發布: 2024-11-07 02:13:02
原創
645 人瀏覽過

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

使用PHP 和MySQL 查詢結果來取得父節點下的所有子節點、孫子節點等

本文將引導您完成一種檢索所有子節點和後代節點的方法使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!