【发布时间】:2026-02-05 04:00:01
【问题描述】:
我有一张员工表,其中一些员工是经理。 我需要一个函数来获取员工 ID 并创建一个包含所有向他们报告的员工的多维数组。到目前为止,我能够打印树:
function drillDownStaff($emplid){
$conn = db_connect();
$sql = "SELECT
employees.EmployeeID, employees.ManagerID
FROM
employees
WHERE
employees.ManagerID = '".$emplid."';
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_assoc($result)){
echo "<ul>";
echo "<li>".$row['FullName'];
drillDownStaff($row['EmployeeID']);
echo "</li>";
echo "</ul>";
}
}
这将打印出一个漂亮的经理->员工树:
- 约翰
- 简
- 保罗
- 玛丽亚
- 马克
- 托尼
- 布兰
- 简
- 科琳
- 罗克西
- 狐狸精
- 礼来
- 莫琳
但我想要的是递归函数来返回一个带有员工树的多维数组,如下所示:
array(
[5] => array(
[FullName] => John
[...] => Other emp details
[manages] => array(
[6]=>array(
[FullName]=>Jane
[...]=>other emp details
[manages]=> array(Pauls' details)
)
[7]=>array(...) // emp details again
)
)
)
这可能吗?
【问题讨论】:
-
是的,这是可能的,但需要一些工作。你试过什么?
-
我尝试了太多要记住的事情。我能得到的最好的结果是一个大的平面阵列,所有的 emps 都按顺序排列,但不是一个合适的多暗阵列。我想我在通过递归函数时很难理解数组和子数组的范围。
-
您知道,只要立即阅读此内容,我认为,完成此任务的最简单方法不一定是递归。对数据库的所有拉取对于入侵都是危险的。您可以尝试两次拉动您的数据库。 1.拉所有经理。 2. 拉动所有员工。然后创建一个空的多维数组并将每个经理推送到 [i][] 并为每个员工(如果他们向经理报告)推送 [i][j]。这有意义吗?
-
要构建这样的数组,最好知道查询结果数组是如何在里面。你能
var_dump它并展示它的结构吗? -
为什么在循环中使用 $i 变量和条件语句?它们都将永远等于 true。
标签: php recursion multidimensional-array