相同键值某个字段相加
现有数组:
[
0 => array:2 [
"number" => "30"
"coins" => "230"
]
1 => array:2 [
"number" => "30"
"coins" => "66"
]
2 => array:2 [
"number" => "29"
"coins" => "72"
]
3 => array:2 [
"number" => "29"
"coins" => "225"
]
4 => array:2 [
"number" => "28"
"coins" => "213"
]
5 => array:2 [
"number" => "28"
"coins" => "72"
]
]
有如下需求: number值相同的去重,并将coins值合并。
第一种方式:
$outArr = [];
foreach ($input as $arr) {
$number = $arr['number'];
if (key_exists($number, $outArr)) {
$outArr[$number] += $arr['coins'];
} else {
$outArr[$number] = $arr['coins'];
}
}
输出:键值为number value值为 coins的数组
array:3 [
30 => 296
29 => 297
28 => 285
]
方法二:
$outArr = array_reduce($input, function($result, $item) {
if(!isset($result[$item['number']])) $result[$item['number']] = 0;
$result[$item['number']] += $item['coins'];
return $result;
}, array());
同样输出:键值为number value值为 coins的数组
array:3 [
30 => 296
29 => 297
28 => 285
]
$tmp = [];
foreach($outArr as $key => $item){
$tmp[] = [
"number" => $key,
"coins" => $item
];
}
得到最终结果:
array:3 [
0 => array:2 [
"number" => 30
"coins" => 296
]
1 => array:2 [
"number" => 29
"coins" => 297
]
2 => array:2 [
"number" => 28
"coins" => 285
]
]
龙卷风之殇

浙公网安备 33010602011771号