合并两个集合而不循环
Combine two collections without looping
如何在不使用任何迭代收集方法的情况下合并两个集合?
我有以下内容:
$stores = collect([
['store_id'=> 5, 'name' => 'test1'],
['store_id'=> 33, 'name' => 'test2'],
['store_id'=> 7, 'name' => 'test3'],
]);
$estimations = [
33 => ['minutes' => 40],
5 => ['minutes' => 30],
7 => ['minutes' => 25]
];
我希望结果如下:
[
['store_id'=> 5, 'name' => 'test1', 'minutes' => 30],
['store_id'=> 33, 'name' => 'test2', 'minutes' => 40],
['store_id'=> 7, 'name' => 'test3', 'minutes' => 25],
]
不使用使用任何迭代方法,如transform
或map
。
您可以使用 Laravel Collection 的 merge()
方法。
$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();
如 Laravel 文档所述:“如果给定项中的字符串键与原始 collection 中的字符串键匹配,则给定项的值将覆盖原始值 collection".
假设 $estimations
数组中的键应该对应于集合中的 store_id
值,我认为如果你通过 [= 键集合,你可以使用 replaceRecursive()
16=].
$result = $stores->keyBy('store_id')->replaceRecursive($estimations)->values();
如何在不使用任何迭代收集方法的情况下合并两个集合?
我有以下内容:
$stores = collect([
['store_id'=> 5, 'name' => 'test1'],
['store_id'=> 33, 'name' => 'test2'],
['store_id'=> 7, 'name' => 'test3'],
]);
$estimations = [
33 => ['minutes' => 40],
5 => ['minutes' => 30],
7 => ['minutes' => 25]
];
我希望结果如下:
[
['store_id'=> 5, 'name' => 'test1', 'minutes' => 30],
['store_id'=> 33, 'name' => 'test2', 'minutes' => 40],
['store_id'=> 7, 'name' => 'test3', 'minutes' => 25],
]
不使用使用任何迭代方法,如transform
或map
。
您可以使用 Laravel Collection 的 merge()
方法。
$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();
如 Laravel 文档所述:“如果给定项中的字符串键与原始 collection 中的字符串键匹配,则给定项的值将覆盖原始值 collection".
假设 $estimations
数组中的键应该对应于集合中的 store_id
值,我认为如果你通过 [= 键集合,你可以使用 replaceRecursive()
16=].
$result = $stores->keyBy('store_id')->replaceRecursive($estimations)->values();