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

array_merge与in_array无法满足需求,如何合并数组处理amount?

解决数组按ID累加/追加的问题

我懂你的痛点!想用array_merge和in_array实现按'id'合并数组、累加amount的逻辑确实行不通——这俩函数没法针对特定键值做精准的判断和数值累加操作。咱们换个思路,用以'id'为键的临时关联数组来处理,效率高还准确。

具体实现步骤

  1. 先把原数组$array转换成以'id'为键的关联数组,这样后续查找id是否存在时,能直接通过键名快速定位,不用循环遍历整个数组。
  2. 遍历第二个数组array2,对每个元素做判断:
    • 如果'id'已经在临时数组里,就把当前元素的'amount'累加到对应项的amount上;
    • 如果'id'不存在,就把这个元素直接添加到临时数组中。
  3. 最后如果需要恢复成原来的索引数组格式,用array_values()转换一下就行。

代码示例

假设你的输入数组是这样的:

$array = [
    ['id' => 1, 'amount' => 10],
    ['id' => 2, 'amount' => 20]
];

$array2 = [
    ['id' => 2, 'amount' => 15],
    ['id' => 3, 'amount' => 5]
];

处理代码:

// 构建以id为键的临时数组,方便快速查找
$tempArray = [];
foreach ($array as $item) {
    $tempArray[$item['id']] = $item;
}

// 遍历第二个数组,处理合并/累加逻辑
foreach ($array2 as $item) {
    $currentId = $item['id'];
    if (isset($tempArray[$currentId])) {
        // id已存在,累加amount
        $tempArray[$currentId]['amount'] += $item['amount'];
    } else {
        // id不存在,直接追加
        $tempArray[$currentId] = $item;
    }
}

// 转换回索引数组(如果不需要关联数组格式的话)
$result = array_values($tempArray);

输出结果

执行后print_r($result)会得到:

Array
(
    [0] => Array
        (
            [id] => 1
            [amount] => 10
        )

    [1] => Array
        (
            [id] => 2
            [amount] => 35
        )

    [2] => Array
        (
            [id] => 3
            [amount] => 5
        )
)

这个方法的优势在于,用键名判断存在性的时间复杂度是O(1),比用in_array循环查找的O(n)高效得多,尤其是数组元素较多的时候,差距会很明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:27:12