PHP合并数组的值,同时添加其他相应的值


php merging values of an array while adding other respective values

我正在生成json格式的以下数组

[
  {
    "country": "China",
    "amount": "1"
  },
  {
    "country": "India",
    "amount": "5"
  },
  {
    "country": "India",
    "amount": "317"
  },
  {
    "country": "India",
    "amount": "8"
  },
  {
    "country": "India",
    "amount": "2"
  },
  {
    "country": "United States",
    "amount": "213"
  },
  {
    "country": "Iceland",
    "amount": "263"
  }
]

我试过将它们与以下代码合并

$newData = array();
    $result = array_reduce(
        $data,
        function($newData, $value) {
            $key = $value['country'];
            if (!isset($newData[$key])) {
                $newData[$key] = $value;
            } else {
                $newData[$key]['amount'] += $value['amount'];
            }
            return $newData;
        },
        $newData
    );

我想要的输出是

[
  {
    "country": "China",
    "amount": "1"
  },
  {
    "country": "India",
    "amount": "332"
  },
  {
    "country": "United States",
    "amount": "213"
  },
  {
    "country": "Iceland",
    "amount": "263"
  }
]

如您所见,该数组与所有分组的国家值和相应添加的金额值合并。

使用简单的foreach循环而不是array_reduce

$newData = array();
foreach ($data as $e) {
    if (isset($newData[$e['country']])) {
        $newData[$e['country']]['amount'] += $e['amount'];
    } else {
        $newData[$e['country']] = $e;
    }
}
$newData = array_values($newData);

试试这个:

$newData = array();
foreach($oldData as $oldEntry){
    foreach($newData as $newEntry){
        if($oldEntry['country'] == $newEntry['country'])
            $newEntry['country'] += $oldEntry['country'];
            break;
    }
    $newData[] = array('country' => $oldEntry['country'], 'amount' => $oldEntry['amount'];
}