如何解决Laravel 以直接方式组合或合并两个 Collection 的对象
$user = collect(["name"=>"sam","age"=>20],["name"=>"john","age"=>21],["name"=>"roz","age"=>19]);
$car = collect(["name"=>"sam","car"=>"BMW"],"car"=>"Audi"],"car"=>"Ford"]);
我想合并或组合这两个集合并获得如下输出:
$collection = (["name"=>"sam","age"=>20,"age"=>21,"age"=>19,"car"=>"Ford"])
感谢您的支持。
解决方法
$users = collect([["name"=>"sam","age"=>20],["name"=>"john","age"=>21],["name"=>"roz","age"=>19]]);
$cars = collect([["name"=>"sam","car"=>"BMW"],"car"=>"Audi"],"car"=>"Ford"]]);
return $users->map(function ($item) use ($cars) {
$car = $cars->first(fn ($value)=> $value['name'] === $item['name']);
$item['car'] = $car['car'];
return $item;
})->all();
注意:您使用 collect
方法的方式不会给您想要的东西,您需要像上面的代码一样将整个包裹在一个数组中。
如果集合是有序集合,您可以循环遍历其中之一并排列您的数据:
/**
* Merging the user and the car collections
*
* @param Collection $users
* @param Collection $cars
*
* @return Collection
*/
function mergeUserCollections(Collection $users,Collection $cars): Collection
{
$result = [];
foreach ($users as $index => $user) {
$result[] = [
'name' => $user['name'],'age' => $user['age'],'car' => $cars[$index]['car'],];
}
return collect($result);
}
function getData()
{
$users = collect([
["name"=>"sam","age"=>19]
]);
$cars = collect([
["name"=>"sam","car"=>"Ford"]
]);
$merged_data = mergeUserCollections($users,$cars);
}
如果不是,则按带有名称的汽车集合分组:
/**
* Merging the user and the car collections
*
* @param Collection $users
* @param Collection $cars
*
* @return Collection
*/
function mergeUserCollections(Collection $users,Collection $cars): Collection
{
$result = [];
$users_cars = $cars->keyBy('name');
foreach ($users as $index => $user) {
$result[] = [
'name' => $user['name'],'car' => $users_cars[$user['name']]['car'],];
}
return collect($result);
}
function getData()
{
$users = collect([
["name"=>"sam",$cars);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。