php-层次表中的递归函数
我正在尝试从具有部门层次结构的表中,从特定的父部门获取所有孩子 表格php-层次表中的递归函数,php,recursion,yii2,infinite-loop,Php,Recursion,Yii2,Infinite Loop,我正在尝试从具有部门层次结构的表中,从特定的父部门获取所有孩子 表格 id | id_department | id_department_manager 1 15 12 2 4 15 3 33 15 4 27 33 5 12 12 递归函数 function recursi
id | id_department | id_department_manager
1 15 12
2 4 15
3 33 15
4 27 33
5 12 12
递归函数
function recursive (array $elements) {
$arr = $elements;
foreach ($arr as $value) {
$departments = DepartmenstDependencies::find()->where(['id_department_manager' => $value])->all();
}
foreach ($departments as $department) {
$arr[] = $department->id_department;
$arr = recursive($arr);
}
return $arr;
}
recursive([12]);
例如,当我调用递归([15])时,目标是正确返回数组([0]=>15[1]=>4[2]=>33[3]=>27)
但是当我调用
递归([12])
时,正确的输出是数组([0]=>12[1]=>15[2]=>4[3]=>33[4]=>27)
但是我得到了无限循环,这是因为表中的最后一行5,12,12
但是我如何避免这个问题呢?这个递归函数正确吗?很好的测试。我想您不希望返回的数组包含重复项。替换
foreach ($departments as $department) {
$arr[] = $department->id_department;
$arr = recursive($arr);
}
与
foreach ($departments as $department) {
if (!in_array($department->id_department, $arr)) {
$arr[] = $department->id_department;
$arr = recursive($arr);
}
}