如何使用集合映射多个请求

时间:2017-08-28 06:36:10

标签: php arrays laravel

我有来自多个时间输入的时间请求

<form>
    ...
    <input type="text" name="times[]">
    <input type="text" name="times[]">
    ...
</form>

在我的控制器中dd($request->times)看起来像这样

array:3 [
  0 => "2:25 AM"
  1 => "5:35 AM"
  2 => "5:40 AM"
]

如何使用laravel集合将此请求映射到此

[
    [
        'time' => '2:25 AM',
    ],
    [
        'time' => '5:35 AM',
    ],
    [
        'time' => '5:40 AM',
    ],
]  

我试过这个

$timesArray = collect([$request->times]);
$times = $timesArray->mapWithKeys(function ($item, $key) {
    return [ 'time' => $item[$key] ];
})->toArray();

但它只返回

array:1 [
  "time" => "2:25 AM"
]

感谢。

2 个答案:

答案 0 :(得分:2)

您不需要使用mapWithKeys,而是试图在没有密钥的情况下映射数组值,因此map会这样做。

$times = collect($request->times)
    ->map(function ($time) {
        return [ 'time' => $time ];
    })
    ->toArray();

此外,$request->times已经是一个数组,因此您不必再将其包装在方括号中,或者在数组中创建数组。

答案 1 :(得分:1)

试试这个

$timesArray = [];
foreach($request->times as $time){
    $timesArray[] = ['time' => $time];
}