合并两个集合而不循环

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],
]

不使用使用任何迭代方法,如transformmap

您可以使用 Laravel Collection 的 merge() 方法。

$collection = collect(['product_id' => 1, 'price' => 100]);

$merged = $collection->merge(['price' => 200, 'discount' => false]);

$merged->all();

如 Laravel 文档所述:“如果给定项中的字符串键与原始 collection 中的字符串键匹配,则给定项的值将覆盖原始值 collection".

文档:https://laravel.com/docs/9.x/collections#method-merge

假设 $estimations 数组中的键应该对应于集合中的 store_id 值,我认为如果你通过 [= 键集合,你可以使用 replaceRecursive() 16=].

$result = $stores->keyBy('store_id')->replaceRecursive($estimations)->values();