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);
    }
}