php - 合并和汇总对象数组中的某些项目属性
问题描述
我有一组需要不同项目的对象。基本上,某些相似的属性值应该加在一起。
例如,我想要的是一个重复 user_id 被合并的项目,并将其点加在一起:
$data = [
{
"user_id": 2,
"point": 2
},
{
"user_id": 16,
"point": 3
},
{
"user_id": 2,
"point": 10
},
{
"user_id": 2,
"point": 10
}
]
这是我期望的结果:
$data = [
{
"user_id": 2,
"point": 22
},
{
"user_id": 16,
"point": 3
}
]
解决方案
json_decode
首先使用函数将您的 JSON 格式数据转换为数组。
$users = json_decode($data, true);
- 按 对您的数据进行分组
user_id
。
$groupedById = array_reduce($users, function ($accumulator,$user) {
$accumulator[$user['user_id']][] = $user;
return $accumulator;
}, []);
point
通过累加按 分组的每个用户的 来计算点的总和user_id
。
foreach ($groupedById as $users) {
$sumPoints = array_sum(array_column($users, 'point'));
$result[] = ['user_id'=>$users[0]['user_id'], 'point'=>$sumPoints];
}
- 打印结果。
echo json_encode($result);
[{"user_id":2,"point":22},
{"user_id":16,"point":3}]
推荐阅读
- php - 显示高级自定义字段的画廊网格视图 Wordpress
- nginx - 使用 nginx 和 auth_request 提供一个静态文件
- javascript - 在 react-native 中获取安全的当前日期
- java - @Produces(MediaType.APPLICATION_JSON) 和 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 参数类型的内部详细信息?
- list - kotlin:从列表中提取
- java - How to upload a file to Azure storage?
- android - 我可以将所有名称都添加到 1 recyclerview
- javafx - 什么是合适的 JavaFX 容器来存储标签?
- groovy - 使用 groovy 解析 json 响应时出现错误
- c# - Entity Framework Core 2.2 中的一对一或零映射