本文将引导您完成一种检索所有子节点和后代节点的方法使用 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) 的关联数组
该解决方案可以有效地检索指定父节点的所有子节点和后代节点,而无需构建多维树结构。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3