Home >Database >Mysql Tutorial >How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 15:02:02747browse

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

Get Child, Grandchild, and Descendent Nodes Using PHP with MySQL Query Results

This query retrieves data from a MySQL table with an adjacency list structure, where each row represents a node and its relationship to its parent. The goal is to transform this data into an array that includes all child, grandchild, and descendant nodes under a specified parent ID while incorporating the parent node itself.

Using a Recursive Function: fetch_recursive

The fetch_recursive function traverses the data array, starting with the given parent ID, and recursively adds child elements until all descendent nodes have been included. Here's the function code:

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

Using the fetch_recursive Function

To use the function, pass the data array obtained from the query to the fetch_recursive function and specify the parent ID you want to retrieve the descendants from. For example:

$list = fetch_recursive($data, 3);

This will return an array with the following structure, including the parent node with ID 3 and all its descendants:

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
        )
)

The above is the detailed content of How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn