首页 > 解决方案 > 合并和汇总对象数组中的某些项目属性

问题描述

我有一组需要不同项目的对象。基本上,某些相似的属性值应该加在一起。

例如,我想要的是一个重复 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
  }
]

标签: php

解决方案


  • 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}]

推荐阅读