2017-03-13 75 views
0

需要關於laravel中的.each()方法array_push的幫助。我不能得到在此代碼容器陣列: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); 

基本上,上述我的代碼要迭代內。每個數據(),然後將其推送到陣列容器和通過分批插入。 注意:當我使用foreach時不會有任何問題,但我需要使用.each()而不是foreach。

感謝

+1

'use(&$ imagesData)' –

+0

很酷!工作! – Cris

回答

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以普通數組形式返回結果。

+0

我喜歡這種方法! – Cris

2

因爲要改變原有的$imageData,你需要參考這個變量,而不是僅僅照搬它的價值。這是通過使用&符號&完成的。

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