добавление конечных значений в многомерный массив

У меня есть массив со следующей структурой.

Есть ли функция, которая может объединять элементы вместе, суммируя итоги?

Спасибо за любые советы о том, как этого добиться. Я включил здесь часть массива, а затем опускаю обнадеживающий результат.

Я могу добиться этого путем создания второго массива, когда я реинтегрирую по запросу 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
)

)

)

-2

Решение

Вам нужна рекурсивная сумма массива.

Вы можете достичь этого путем рекурсивного сокращения массива с помощью 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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector