首頁  >  文章  >  資料庫  >  如何使用 PHP 和 MySQL 查詢結果來取得子節點、孫節點和後代節點?

如何使用 PHP 和 MySQL 查詢結果來取得子節點、孫節點和後代節點?

Patricia Arquette
Patricia Arquette原創
2024-11-06 15:02:02659瀏覽

How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?

使用PHP 和MySQL 查詢結果取得子節點、孫子節點和後代節點

此查詢從具有鄰接清單的MySQL 表中擷取資料結構,其中每一行代表一個節點及其與其父節點的關係。目標是將這些資料轉換為數組,其中包含指定父 ID 下的所有子節點、孫節點和後代節點,同時合併父節點本身。

使用遞歸函數:fetch_recursive

fetch_recursive 函數從給定的父 ID 開始遞曆資料數組,並遍歸地新增子元素,直到包含所有後代節點。函數代碼如下:

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;
}

使用fetch_recursive 函數

要使用該函數,請將查詢獲得的資料數組傳遞給fetch_recursive 函數,並指定您想要從中檢索後代的父ID。例如:

$list = fetch_recursive($data, 3);

這將傳回一個具有以下結構的數組,包括 ID 為 3 的父節點及其所有後代:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Portable Electronics
            [parent_id] => 1
        )

    [1] => Array
        (
            [id] => 7
            [name] => Mp3 Players
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 10
            [name] => Flash
            [parent_id] => 7
        )

    [3] => Array
        (
            [id] => 8
            [name] => CD Players
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 9
            [name] => 2 Way Radios
            [parent_id] => 3
        )
)

以上是如何使用 PHP 和 MySQL 查詢結果來取得子節點、孫節點和後代節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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