php - 不同深度层次的分层数据——递归函数
问题描述
我有一个车辆分层表。我想编写递归函数来查找给定 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)请给我一些帮助。
解决方案
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;
}
推荐阅读
- javascript - 如何在 React 中使用 Google Classroom API?
- flutter - Flutter Form Field 浮动在顶部
- javascript - 如何在 ASP.NET 控制器中发送客户端值?
- azure - 是否可以添加自定义实体类别,以便可以通过文本分析 API 使用
- snowflake-cloud-data-platform - 雪花跟踪器由哪个用户更改
- reactjs - 放大:联合登录时“未提供 Cognito 联合身份池”
- python - 如何复制bash对作为参数传递给其他命令的命令的转义
- android - 使用 Retrofit 解析 XML
- conda - 带有 conda 的 qsub 激活?
- ruby-on-rails - 仅提取自上次提取以来创建的记录的最有效方法是什么?