У меня есть массив со следующей структурой.
Есть ли функция, которая может объединять элементы вместе, суммируя итоги?
Спасибо за любые советы о том, как этого добиться. Я включил здесь часть массива, а затем опускаю обнадеживающий результат.
Я могу добиться этого путем создания второго массива, когда я реинтегрирую по запросу php mysql, но это не очень эффективный способ работы.
Array
(
[1] => Array
(
[Y01MA] => Array
(
[O] => Array
(
[F] => Array
(
[1] => 4
[2] => 6
[3] => 1
)
[M] => Array
(
[1] => 5
[2] => 5
)
)
[P] => Array
(
[F] => Array
(
[2] => 4
[3] => 6
[4] => 1
)
[M] => Array
(
[1] => 1
[2] => 4
[3] => 5
)
)
)
[Y01MB] => Array
(
[O] => Array
(
[F] => Array
(
[1] => 7
[2] => 2
)
[M] => Array
(
[1] => 11
[2] => 1
[3] => 1
)
)
[P] => Array
(
[F] => Array
(
[2] => 3
[3] => 6
)
[M] => Array
(
[2] => 3
[3] => 9
[4] => 1
)
)
)
)
В идеале, то, что я тогда получу, это что-то вроде этого
массив
(
[1] => Массив
(
[O] => Массив
(
[F] => Массив
(
[1] => 18
[2] => 2
[3] => 0
[4] => 0
)
[M] => Array
(
[1] => 23
[2] => 0
[3] => 0
[4] => 0
)
)
[P] => Array
(
[F] => Array
(
[1] => 1
[2] => 11
[3] => 7
[4] => 1
)
[M] => Array
(
[1] => 4
[2] => 11
[3] => 8
[4] => 0
)
)
)
Вам нужна рекурсивная сумма массива.
Вы можете достичь этого путем рекурсивного сокращения массива с помощью array_reduce
функция.
function sumRecursive($carry, $item) {
if(is_array($item)){
return array_reduce($item, 'sumRecursive', $carry);
}
return $carry+$item ;
}
$sum = sumRecursive(0, $arr);
Вот пример рабочего кода: https://3v4l.org/FuGtf
Другой способ был бы использовать RecursiveArrayIterator
а также RecursiveIteratorIterator
перебрать первый. 😉
$sum = array_sum(
iterator_to_array(
new RecursiveIteratorIterator(
new RecursiveArrayIterator($arr)
),
false
)
);
Рабочий код: https://3v4l.org/gEB6q
Других решений пока нет …