相同键值某个字段相加

现有数组:

 [
  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
  ]
]

 

posted @ 2023-04-26 14:46  龙卷风之殇  阅读(27)  评论(0)    收藏  举报