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!