Я пытался весь день суммировать ниже массив на основе значения и получать только отдельные значения.
Вот мой входной массив:
[
{
"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"
}
]
Я совсем запутался, как это проверить?






Сделать массив со сложным индексом $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);
Что ты имеешь в виду?
Если он хочет выполнить агрегацию для элементов с этими двумя похожими ключами, ему нужно будет сохранить ту же структуру объекта, как он показал во фрагменте после that returns below. Однако его код этого не делает.
@splash58 это прекрасно работает! Такое "простое" решение. Большое спасибо!!! Действительно ценю это.
Рад помочь. Удачи!
Это должно работать хорошо, если вам не нужно сохранять формат элементов массива.