Laravel集合.each()+ array_push

Cri*_*ris 2 php laravel-5

在laravel上需要关于array_push里面的.each()方法的帮助.我无法在此代码上获取容器数组:

$imagesData = array();
collect($data['images'])->each(function($v, $k) use($imagesData){

    $v['created_at'] = date('Y-m-d H:i:s');
    $v['updated_at'] = date('Y-m-d H:i:s');
    $v['image_id'] = $v['image_id'];
    $v['settings'] = json_encode($v['settings']);

    array_push($imagesData, $v);

});

$result = Images::insert($imagesData, true);
Run Code Online (Sandbox Code Playgroud)

基本上,上面的代码我想迭代.each()中的数据,然后将其推送到数组容器并批量插入.注意:当我使用foreach时没有问题,但我需要使用.each()而不是foreach.

谢谢

man*_*niL 14

因为您想要更改原始内容$imageData,所以需要引用此变量而不是仅复制它的值.这是通过使用&符来完成的&.

collect($data['images'])->each(function($v, $k) use(&$imagesData){ .....


Mos*_*atz 8

使用该Collection::map方法是一种更易读的方式来做同样的事情:

$imagesData = collect($data['images'])
    ->map(function($item) {

        $item['created_at'] = date('Y-m-d H:i:s');
        $item['updated_at'] = date('Y-m-d H:i:s');
        $item['image_id'] = $item['image_id'];
        $item['settings'] = json_encode($item['settings']);

        return $item;
    })
    ->all();

$result = Images::insert($imagesData, true);
Run Code Online (Sandbox Code Playgroud)

map以与数据相同的方式迭代数组each.区别在于each不返回任何内容(因此您需要自己构建新数组),同时map自动构建return函数内部项目的新集合.之后map,您将使用all将结果作为普通数组返回.