本文将引导您完成一种检索所有子节点和后代节点的方法使用 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中文网其他相关文章!