如何使用 PHP 获取 MySQL 中父节点的所有子节点和后代节点?

Barbara Streisand
发布: 2024-11-07 02:13:02
原创
645 人浏览过

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

使用 PHP 和 MySQL 查询结果获取父节点下的所有子节点、孙子节点等

本文将引导您完成一种检索所有子节点和后代节点的方法使用 PHP 和 MySQL 查询结果的指定父级。这种技术消除了构建树结构的多维数组的需要,使您能够直接获取所有节点。

考虑一个组织为邻接列表的 MySQL 表,其中层次结构数据用 id、name 列表示和parent_id。以下 SQL 查询可以将此表中的所有行检索到关联数组中:

$r = mysql_query("SELECT * FROM test ");
$data = array();
while($row = mysql_fetch_assoc($r)) {
  $data[] = $row;
}
登录后复制

假设我们要过滤此数组以查找 id 为 3 的父级下的节点,包括父级本身。这个自定义的 fetch_recursive 函数可以完成这个任务:

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;
}
登录后复制

要使用此函数,将从查询中获得的 $data 数组作为第一个参数传递,并将要检索其子节点的父节点的 id 传递为第二个参数:

$list = fetch_recursive($data, 3);
登录后复制

$list 现在将包含一个关联数组,其中包含所有子节点和父节点 (id 3)。

此解决方案有效检索所有子节点和后代节点对于指定的父级,无需构建多维树结构。

以上是如何使用 PHP 获取 MySQL 中父节点的所有子节点和后代节点?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!