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

PHP:合并连续相同ID的数组,保留首value与末sec值

解决连续相同ID元素合并的PHP实现方案

嘿,这个需求我刚好碰到过类似的,下面给你一个简单易懂的实现思路和代码:

核心思路

我们需要只合并连续相同ID的元素,所以不需要先把所有相同ID的元素提前分组,而是边遍历边判断处理:

  • 先把原数组的第一个元素作为初始分组的起点
  • 从第二个元素开始遍历,每次对比当前元素的ID和结果数组最后一个元素的ID
    • 如果ID相同,就更新当前分组的sec为当前元素的sec(因为要取组内最后一个元素的sec)
    • 如果ID不同,就把当前元素作为新的分组加入结果数组

完整代码实现

<?php
// 原始数组
$results = array(
    array('value' => 100, 'ID' => 333, 'sec' => 200),
    array('value' => 200, 'ID' => 333, 'sec' => 300),
    array('value' => 300, 'ID' => 555, 'sec' => 400),
    array('value' => 400, 'ID' => 555, 'sec' => 500),
    array('value' => 500, 'ID' => 333, 'sec' => 600)
);

// 处理逻辑
$merged = [];
if (!empty($results)) {
    // 初始化第一个分组
    $merged[] = $results[0];
    // 从第二个元素开始遍历
    for ($i = 1; $i < count($results); $i++) {
        $current = $results[$i];
        $lastMerged = &$merged[count($merged)-1]; // 引用最后一个元素,方便直接修改
        
        if ($current['ID'] === $lastMerged['ID']) {
            // ID相同,更新sec为当前元素的sec(取组内最后一个值)
            $lastMerged['sec'] = $current['sec'];
        } else {
            // ID不同,添加新的分组
            $merged[] = $current;
        }
    }
}

// 输出合并后的结果
print_r($merged);
?>

运行结果

执行上面的代码后,输出的合并数组会是:

Array
(
    [0] => Array
        (
            [value] => 100
            [ID] => 333
            [sec] => 300
        )

    [1] => Array
        (
            [value] => 300
            [ID] => 555
            [sec] => 500
        )

    [2] => Array
        (
            [value] => 500
            [ID] => 333
            [sec] => 600
        )
)

关键点说明

  • 使用引用&$merged[count($merged)-1]直接修改结果数组的最后一个元素,避免重复取值赋值,提升处理效率
  • 先判断原数组是否为空,防止数组为空时出现索引错误
  • 用===严格判断ID相等,避免类型转换带来的意外问题

内容的提问来源于stack exchange,提问作者qaakmnd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:22