php - Laravel Lumen Collection - 按总和分组并保留值
问题描述
我正在研究流明,我的收藏有重复的值,例如:
collect([
[
'name' => 'John Doe',
'department' => 'Sales',
'phone' => '99999-99999',
'value' => 25.0
],
[
'name' => 'Mary Lisa',
'department' => 'Finance',
'phone' => '88888-88888',
'value' => 5.0
],
[
'name' => 'Mary Lisa',
'department' => 'Finance',
'phone' => '88888-88888',
'value' => 58.0
],
[
'name' => 'Lucas Rodrigues',
'department' => 'Marketing',
'phone' => '22222-22222',
'value' => 90.0
]
])
当名称相同但保留其他值(例如(部门和电话))并删除重复实体时,我想对 value 属性求和,例如:
collect([
[
'name' => 'John Doe',
'department' => 'Sales',
'phone' => '99999-99999',
'value' => 25.0
],
[
'name' => 'Mary Lisa',
'department' => 'Finance',
'phone' => '88888-88888',
'value' => 63.0
],
[
'name' => 'Lucas Rodrigues',
'department' => 'Marketing',
'phone' => '22222-22222',
'value' => 90.0
]
])
最好的方法是什么?
解决方案
尝试以下操作:
$newCollection = collect([]);
$collectctions = collect([
[
'name' => 'John Doe',
'department' => 'Sales',
'phone' => '99999-99999',
'value' => 25.0
],
[
'name' => 'Mary Lisa',
'department' => 'Finance',
'phone' => '88888-88888',
'value' => 5.0
],
[
'name' => 'Mary Lisa',
'department' => 'Finance',
'phone' => '88888-88888',
'value' => 58.0
],
[
'name' => 'Lucas Rodrigues',
'department' => 'Marketing',
'phone' => '22222-22222',
'value' => 90.0
]
]);
foreach ($collectctions as $item) {
if($newCollection->contains('name', $item['name'])){
$index = $newCollection->where('name', $item['name'])->keys()[0];
$newCollection = $newCollection->map(function ($object, $i) use ($index, $item) {
if($i == $index){
$object['value'] += $item['value'];
}
return $object;
});
}
else{
$newCollection->push($item);
}
}
return $newCollection;
推荐阅读
- flutter - 颤振 - 比较两个对象列表不起作用
- mount - 在android中使用busybox挂载时不挂载这样的设备
- sql-server - 在 SQL Server 中解析 XML 以获取特定值
- swift - 使用 SpriteKit 更新函数作为 SwiftUI 的动画循环?
- nginx - 使用 proxy_pass 作为位置 Nginx 中的错误页面
- node.js - Nodejs:Twit Node API 状态发布时没有图像且没有错误
- node.js - Nodejs将变量从路由器文件传递到另一个路由器文件
- python - 改组张量有什么用
- r - 如何在 r 中为 elastsearch 设置 apikey
- ceph - 在内部存在不一致的对象时更改 osd