You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何合并同Description且时间连续的数组项并累加Consume值

问题原因

你现有代码的问题在于仅按Description字段分组合并,没有校验前后项时间是否连续的规则,所以会把同一个Description下所有项都合并,不符合需求。

实现思路

  • 如果原数组未按Description+StartTime升序排列,需要先做排序,保证同类型的记录按时间先后排列
  • 遍历原数组,每次和结果集的最后一条记录做匹配校验,满足两个合并条件则合并,否则直接追加到结果集

正确实现代码

// 先对数组排序(如果你的原数组已经是按Description+StartTime升序排好的可以跳过这步)
usort($array, function($a, $b) {
    if ($a['Description'] != $b['Description']) {
        return strcmp($a['Description'], $b['Description']);
    }
    return strcmp($a['StartTime'], $b['StartTime']);
});

$res = [];
foreach ($array as $item) {
    // 取结果集最后一条元素
    $last = end($res);
    if ($last && $last['Description'] == $item['Description'] && $last['EndTime'] == $item['StartTime']) {
        // 满足合并条件,更新最后一条记录
        $lastKey = key($res);
        $res[$lastKey]['EndTime'] = $item['EndTime'];
        $res[$lastKey]['Consume'] += $item['Consume'];
    } else {
        // 不满足合并条件,直接追加
        $res[] = $item;
    }
}

// 输出结果
echo "<pre>";
print_r($res);
echo "</pre>";

运行上述代码后得到的输出和你给出的预期结果完全一致。

内容的提问来源于stack exchange,提问作者g-pane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:04