PHP-总和不同的数组

时间:2019-01-28 14:48:00

标签: php arrays

我整天都在尝试根据值求和来对数组求和,但只得到不同的值。

这是我的输入数组:

[
    {
        "commoditycodes": "6204.4400",
        "statisticalvalue": 1152.6,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6204.4400",
        "statisticalvalue": 542.4,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6104.4300",
        "statisticalvalue": 1827,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6114.3000",
        "statisticalvalue": 5211.36,
        "cvr": "DK37968552"
    },
    {
        "commoditycodes": "6114.3000",
        "statisticalvalue": 798.64,
        "cvr": "DK99999999"
    }
]

我正在尝试“收集”具有相同 cvr值的所有数组,但仍根据commoditycodes显示出不同的值。像这样:

{
    "commoditycodes": "6204.4400",
    "statisticalvalue": 1695,
    "cvr": "DK35425950"
},
{
    "commoditycodes": "6104.4300",
    "statisticalvalue": 1827,
    "cvr": "DK35425950"
},
{
    "commoditycodes": "6114.3000",
    "statisticalvalue": 5211.36,
    "cvr": "DK37968552"
},
{
    "commoditycodes": "6114.3000",
    "statisticalvalue": 798.64,
    "cvr": "DK99999999"
}

]

从输入中可以看到,数组中的前两个结果是:

  • 相同的商品代码
  • 相同的CVR值

然后我们将statisticalvalue求和。

第三个结果的CVR值与前两个结果相同,但是commoditycode的值不同-因此,这是唯一的值。

数组的第四和第五个元素也都是唯一的。

因此,基本上,我试图将statisticalvalue总结如下:

  • CVR值相同
  • 商品代码相同

我在下面尝试过

$result = [];

foreach ($array as $val) {
    //Not a duplicate cvr code
    if (!isset($result[$val['cvr']])) {
        $result[$val['cvr']] = $val;
    //Duplicate cvr code.
    } else {
        $result[$val['cvr']]['statisticalvalue'] += $val['statisticalvalue'];

    }
}

但是下面返回的结果仅包含唯一的cvr值-而不是commoditycodes

[
    {
        "commoditycodes": "6104.6300",
        "statisticalvalue": 68701.56,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6104.6300",
        "statisticalvalue": 21108.95,
        "cvr": "DK37968552"
    },
    {
        "commoditycodes": "6114.3000",
        "statisticalvalue": 798.64,
        "cvr": "DK99999999"
    }
]

我完全不知道该如何检查?

1 个答案:

答案 0 :(得分:3)

制作具有复杂索引$val['cvr'].'|'.$val['commoditycodes']的数组

$result = [];

foreach ($array as $val) {
    $index = $val['cvr'].'|'.$val['commoditycodes'];
    if (!isset($result[$index])) {
        $result[$index] = $val;
    //Duplicate
    } else {
        $result[$index]['statisticalvalue'] += $val['statisticalvalue'];
    }
}

如果要使用数字索引创建结果数组,请在循环后添加:

$result = array_values($result);