我整天都在尝试根据值求和来对数组求和,但只得到不同的值。
这是我的输入数组:
[
{
"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"
}
]
从输入中可以看到,数组中的前两个结果是:
然后我们将statisticalvalue
求和。
第三个结果的CVR值与前两个结果相同,但是,commoditycode
的值不同-因此,这是唯一的值。
数组的第四和第五个元素也都是唯一的。
因此,基本上,我试图将statisticalvalue
总结如下:
我在下面尝试过
$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"
}
]
我完全不知道该如何检查?
答案 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);