首页  >  文章  >  数据库  >  如何使用 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