在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。
由于
答案 0 :(得分:11)
因为您想要更改原始RLMResults
,所以您需要引用此变量而不是仅复制它的值。这是通过使用&符RLMResults *objectsToSaveImagesFor = [self allObjectsToSaveImagesFor];
RLMThreadSafeReference *objectsRef = [RLMThreadSafeReference referenceWithThreadConfined:objectsToSaveImagesFor];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
RLMRealm *realm = [RLMRealm realmWithConfiguration:self.realm.configuration error:nil];
RLMResults *objectsToSaveImagesFor2 = [realm resolveThreadSafeReference:objectsRef];
for (Object *object in objectsToSaveImagesFor2) {
BOOL success = [self downloadImageForObject:threadSafeObject];
[realm transactionWithBlock:^{
object.imageSaved = success;
}];
}
});
完成的。
$imageData
答案 1 :(得分:6)
使用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
将结果作为普通数组返回。