递归方法填充数组php laravel

时间:2016-08-12 06:01:45

标签: php arrays laravel recursion

我试图创建一个递归方法来填充每个找到的新项目的数组。

function getUserUbigeoString($ubigeo_id){
    $ubigeoRepository = new \App\Repositories\UbigeoRepository();
    $ubigeos = array();

    $ubigeo = $ubigeoRepository->getUbigeo($ubigeo_id);

    if(!empty($ubigeo)){
        if($ubigeo->ubigeo_id == null){
            $ubigeos[] = $ubigeo->name;
        }

        $ubigeos[] = getUserUbigeoString($ubigeo->ubigeo_id);
    }

    return $ubigeos;
}

代码的目标是使用所有ubigeos的名称填充数组。

0 => ubigeo1
1 => ubigeo2
2 => ubigeo3
etc...

截至目前,我已经尝试将返回许多不同的位置,但我得到的最接近的结果是:

array:1 [▼
  0 => array:1 [▼
    0 => array:2 [▼
      0 => "Port Dusty"
      1 => []
    ]
  ]
]

========== EDIT ============ 数据库ubigeos的结构:

id  name     level ubigeo_id
----------------------------
3    ubigeo1  1     null
37   ubigeo2  2     3
55   ubigeo3  3     37

输出将是一个简单的数组,然后我可以内爆到逗号分隔的字符串:

array:1 [
  0 => 'ubigeo1'
  1 => 'ubigeo2'
  2 => 'ubigeo3'
]

2 个答案:

答案 0 :(得分:1)

所以假设你真的想用带有Ubigeo实例的函数来调用它,并且只从那个和Ubigeo实例中获取名称(即最初调用id为55的函数来获取结果数组),你可以尝试像这样的东西(我不想修改你的函数调用参数 - 通常我会将数组作为函数参数包含在内,而不是在每个递归步骤中实例化新的参数):

function getUserUbigeoString($ubigeo_id)
{
    $ubigeoRepository = new \App\Repositories\UbigeoRepository();
    $ubigeos = array();

    $ubigeo = $ubigeoRepository->getUbigeo($ubigeo_id);

    if(!empty($ubigeo))
    {
        if($ubigeo->ubigeo_id != null) {
            $ubigeos = getUserUbigeoString($ubigeo->ubigeo_id);
        }
        $ubigeos[] = $ubigeo->name;
    }

    return $ubigeos;
}

答案 1 :(得分:0)

使用可以使用laravel中的lists方法

前:

$ubigeoRepository->lists('ubigeo_id','id')->all();