首页 > 解决方案 > 如何合并以下数组?

问题描述

我有多维数组。我需要根据 IDS 将它们组合起来并求和。每个数组包含 FIRSTID、SECONDID、TYPE 和 AMOUNT

[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 300
],
[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 600
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 900
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 500
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 320
    [AMOUNT] => 1000
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 321
    [AMOUNT] => 1500
]

如果 FIRSTID 、 SECONDID 和 TYPE 相同,则添加数量,否则将数组保留在结果中

预期的结果就像

[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 900
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 1400
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 320
    [AMOUNT] => 1000
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 321
    [AMOUNT] => 1500
]

标签: php

解决方案


现场示例在这里

$groups = array();
foreach ($array as $item) {
    $key = $item['FIRSTID'].''.$item['SECONDID'].''.$item['TYPE'];
    if (!array_key_exists($key, $groups)) 
    {
        $groups[$key] = array(
            'FIRSTID' => $item['FIRSTID'],
            'SECONDID' => $item['SECONDID'],
            'TYPE' => $item['TYPE'],
            'AMOUNT' => $item['AMOUNT'],
        );
    } 
    else {

        $groups[$key]['AMOUNT'] = $groups[$key]['AMOUNT'] + $item['AMOUNT'];
    }
}

推荐阅读