首页 > 解决方案 > 不同深度层次的分层数据——递归函数

问题描述

我有一个车辆分层表。我想编写递归函数来查找给定 id 的所有后代。我想在不使用路径列的情况下做到这一点。例如: find_children(2) 应该返回 id 数组 [6,7,14,10,11,12,13,17,18,19,15,16]

在此处输入图像描述

我写了函数

public static function find_children ($id)
{
    is_array($id)?$ids=$id:$ids[]=$id;
    static $tab=[];
    $results=DB::table('vehicles')->whereIn('parent_id',$ids)->pluck('id');
    $how_many=DB::table('vehicles')->whereIn('parent_id',$ids)->count();
    if($how_many==0){
        return $tab;
    }

    $tab[]=$results;
    return  self::find_children($res);
}

对于给定的示例,我在第一次迭代中收到 [6,7,14] 数组,在第二次迭代中收到 [10,11] 数组。我认为问题在于层次结构的不同深度。我不知道如何从(a3,a4)级别回到(audi)然后(bmw)请给我一些帮助。

标签: phplaravel

解决方案


Try with two function like below. let me know if you got any error.

public function getData($id)
{

    $vehicles =DB::table('vehicles')->get();

    return  $this->find_children($vehicles,$id);
}

public function find_children($vehicles,$id)
{
    $ids = [];
    foreach($vehicles as $v)
    {
        if($id == $v->parent_id)
        {
            $ids[] = $v->id;

            $childids = $this->find_children($vehicles,$v->parent_id);

            $ids = array_merge($ids,$childids);
        }
    }
    $response = array_unique($ids);
    return $response;
}

推荐阅读