【问题标题】:Laravel collection .each() + array_pushLaravel 集合 .each() + array_push
【发布时间】:2021-08-05 00:54:24
【问题描述】:

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

$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);

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

谢谢

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    因为要更改原来的$imageData,所以需要引用这个变量,而不是仅仅复制它的值。这是通过使用与符号& 来完成的。

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

    【讨论】:

      【解决方案2】:

      使用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);
      

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

      【讨论】:

        猜你喜欢
        • 2017-10-28
        • 2016-11-13
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多