【问题标题】:php - recursive function in hierarchy tablephp - 层次表中的递归函数
【发布时间】:2020-06-12 01:49:34
【问题描述】:

我正在尝试从具有部门层次结构的表中获取来自特定父亲部门的所有孩子。

表格

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

目标是例如当我调用recursive([15]) 时,正确的返回是Array ( [0] => 15 [1] => 4 [2] => 33 [3] => 27 ) 没关系。

但是当我调用recursive([12]) 时,正确的输出是Array ( [0] => 12 [1] => 15 [2] => 4 [3] => 33 [4] => 27 ) 但我得到了无限循环,这是因为表中的最后一行5, 12, 12 但我如何避免这种情况?这个递归函数正确吗?

【问题讨论】:

    标签: php recursion yii2 infinite-loop


    【解决方案1】:

    很好的测验。我想您不希望返回的数组包含重复项。替换

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多