我正在生成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'];
}