PHP实现按fee列去重并汇总对应amount字段值
按
fee字段分组并合并amount的解决方案 嘿,我懂你要做的事了——你需要把多维数组里fee值相同的项合并,把它们的amount加起来,同时保留其他字段对吧?你之前用array_sum(array_column(...))的方式确实不对,因为它只是把所有fee的值加总了,根本没按fee分组处理amount。
我给你写个简单的解决方案,用循环就能搞定,逻辑还特别清晰:
步骤说明
- 先创建一个空数组用来存最终结果
- 遍历你原有的数组,每一项都检查
fee值是否已经在结果数组里存在 - 如果存在,就把当前项的
amount累加到已有的那一项的amount上 - 如果不存在,就把当前项直接加入结果数组
- 最后如果需要把结果数组的键重置为连续数字,用
array_values()处理一下就行
完整代码示例
// 你的原始数组 $feesArray = [ 12 => [ 'type' => 'Other Miscellaneous Fees', 'fee' => 158, 'amount' => -22.56, 'code' => 'COL_AUDIO', 'feedesc' => 'COLLEGE AUDIO VISUAL FEE' ], 13 => [ 'type' => 'Other Miscellaneous Fees', 'fee' => 158, 'amount' => -297.86, 'code' => 'COL_AUDIO', 'feedesc' => 'COLLEGE AUDIO VISUAL FEE' ], 14 => [ 'type' => 'Other Miscellaneous Fees', 'fee' => 182, 'amount' => -40.00, 'code' => 'STRAP', 'feedesc' => 'ID STRAP' ], 15 => [ 'type' => 'Other Miscellaneous Fees', 'fee' => 177, 'amount' => -105.00, 'code' => 'PRISAA', 'feedesc' => 'PRISAA' ] ]; // 初始化结果数组 $result = []; foreach ($feesArray as $item) { $feeKey = $item['fee']; // 检查当前fee是否已经在结果数组中 if (isset($result[$feeKey])) { // 累加amount $result[$feeKey]['amount'] += $item['amount']; } else { // 第一次出现,直接加入数组 $result[$feeKey] = $item; } } // 如果需要把键重置为连续的数字索引,用array_values() $result = array_values($result); // 输出结果 print_r($result);
输出结果
运行这段代码后,你会得到和你期望完全一致的数组:
Array ( [0] => Array ( [type] => Other Miscellaneous Fees [fee] => 158 [amount] => -320.42 [code] => COL_AUDIO [feedesc] => COLLEGE AUDIO VISUAL FEE ) [1] => Array ( [type] => Other Miscellaneous Fees [fee] => 182 [amount] => -40 [code] => STRAP [feedesc] => ID STRAP ) [2] => Array ( [type] => Other Miscellaneous Fees [fee] => 177 [amount] => -105 [code] => PRISAA [feedesc] => PRISAA ) )
补充说明
这里默认了相同fee的其他字段(比如type、code、feedesc)都是一样的,如果你的实际场景里可能有不同的情况,那你需要额外处理这些字段的保留规则(比如保留第一个出现的,或者合并等),不过从你的示例来看,这个逻辑完全适用。
内容的提问来源于stack exchange,提问作者Raymond
相关产品推荐
相关产品推荐

