You need to enable JavaScript to run this app. 如何按日期合并多维数组同日期项并累加payment_amount数值
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期合并多维数组同日期项并累加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:24:02