如何按日期合并多维数组同日期项并累加payment_amount数值
按日期合并数组并累加支付金额的实现方案
需求说明
需要将多维数组中starting_date字段值相同的项合并,同时累加对应项的payment_amount数值。
现有数组结构
array:4 [ 0 => array[ "payment_amount" => 100 "starting_date" => "2021-06-16" ] 1 => array[ "payment_amount" => 200 "starting_date" => "2021-06-16" ] 2 => array[ "payment_amount" => 300 "starting_date" => "2021-06-16" ] 3 => array[ "payment_amount" => -200 "starting_date" => "2021-06-17" ] ]
期望输出结果
array:2 [ 0 => array[ "payment_amount" => 600 "starting_date" => "2021-06-16" ] 1 => array[ "payment_amount" => -200 "starting_date" => "2021-06-17" ] ]
前端JS代码调整方案
原代码仅实现了排序逻辑,缺少分组累加的核心处理,调整后完整代码如下:
$.ajax({ url: '/test/data', type: 'get', dataType: 'json', success: function (data) { // 按日期排序 data.sort(function(a,b){ return new Date(a.starting_date) - new Date(b.starting_date); }); // 分组累加逻辑 const dateMap = {}; data.forEach(item => { const currentDate = item.starting_date; // 日期首次出现时初始化条目 if (!dateMap[currentDate]) { dateMap[currentDate] = { starting_date: currentDate, payment_amount: 0 }; } // 累加同日期的支付金额 dateMap[currentDate].payment_amount += Number(item.payment_amount); }); // 转换为索引数组格式 const finalResult = Object.values(dateMap); // 此处finalResult就是符合要求的结果,可进行后续处理 console.log(finalResult); }, error: function () { alert("Failed! Please try again."); } });
服务端PHP代码调整方案
原代码存在判断逻辑错误、没有金额累加逻辑的问题,调整后代码如下:
$sortarray = []; foreach ($result as $item) { $currentDate = $item['starting_date']; // 日期首次出现时初始化条目 if (!isset($sortarray[$currentDate])) { $sortarray[$currentDate] = [ 'starting_date' => $currentDate, 'payment_amount' => 0 ]; } // 累加同日期的支付金额 $sortarray[$currentDate]['payment_amount'] += $item['payment_amount']; } // 如果需要重置数组键为从0开始的连续索引,可保留下方代码 $sortarray = array_values($sortarray); // 输出验证 print_r($sortarray);
原PHP代码的核心问题:
- 固定判断和第一个元素的日期一致,无法适配多日期的通用场景
- 用
array_merge合并数组只会覆盖字段,不会做金额累加 - 缺少同日期金额的累加逻辑
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

