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
相关产品推荐
相关产品推荐

