使用 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中文网其他相关文章!