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

如何合并两个stdClass数组并对重复uuid的sum字段求和?

PHP合并两个stdClass数组并按UUID求和

实现思路

核心是利用UUID作为关联数组的键实现快速匹配,避免重复遍历查找,提升处理效率:

  1. 将第一个数组转换为以UUID为键的临时数组,便于后续快速判断UUID是否存在。
  2. 遍历第二个数组,对每个对象做两种处理:
    • 若UUID已存在,累加两个对象的sum值;
    • 若UUID不存在,直接将该对象添加到临时数组。
  3. 最后将关联数组转回索引数组,得到目标格式的结果。

完整代码示例

// 定义两个原始数组
$array1 = [
    (object)['uuid' => '12e3b273-ef84-4960-9f81-16cc35e69a58', 'sum' => 10],
    (object)['uuid' => '345265aa-5f85-405d-b256-9f2cc706d222', 'sum' => 20],
    (object)['uuid' => '8650b97e-f7c0-4d4c-a065-a082bd4fdbce', 'sum' => 30],
];

$array2 = [
    (object)['uuid' => '6be4da35-f0d0-4b24-99ed-ad06b95354ce', 'sum' => 200],
    (object)['uuid' => '8650b97e-f7c0-4d4c-a065-a082bd4fdbce', 'sum' => 100],
];

// 初始化合并后的临时数组
$merged = [];

// 处理第一个数组,转为以UUID为键的数组
foreach ($array1 as $item) {
    $merged[$item->uuid] = clone $item; // 克隆对象避免修改原数组数据
}

// 处理第二个数组,完成合并求和或新增
foreach ($array2 as $item) {
    if (isset($merged[$item->uuid])) {
        $merged[$item->uuid]->sum += $item->sum;
    } else {
        $merged[$item->uuid] = clone $item;
    }
}

// 将关联数组转换为连续索引数组
$result = array_values($merged);

// 输出结果
print_r($result);

代码说明

  • 使用clone对象是为了防止修改原数组中的对象实例,避免产生意外的副作用。
  • 以UUID为键的关联数组可以将存在性判断的时间复杂度从O(n)降到O(1),处理大数据量时效率优势明显。
  • array_values()会重置数组索引,最终生成连续的索引数组,完全符合你需要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:35:24