php: сумма массива без foreach

У меня есть такой массив

Array
(
[1_DAY_2017] => Array
(
[SAMSUNG] => Array
(
[0] => 549
[1] => 199
[2] => 999
)

[XIAOMI] => Array
(
[0] => 199
[1] => 2999
[2] => 499
)

)

[2_DAY_2017] => Array
(
[SAMSUNG] => Array
(
[0] => 699
[1] => 999
)

[LENOVO] => Array
(
[0] => 280
[1] => 2550
[2] => 849
)

)

[3_DAY_2017] => Array
(
[OPPO] => Array
(
[0] => 500
[1] => 599
)

[SAMSUNG] => Array
(
[0] => 799
)

)

[4_DAY_2017] => Array
(
[SAMSUNG] => Array
(
[0] => 1299
[1] => 499
[2] => 799
[3] => 2500
)

[OPPO] => Array
(
[0] => 299
[1] => 349
[2] => 499
)

)

[5_DAY_2017] => Array
(
[XIAOMI] => Array
(
[0] => 500
[1] => 270
[2] => 340
)

[VIVO] => Array
(
[0] => 4599
[1] => 299
)

)

[6_DAY_2017] => Array
(
[VIVO] => Array
(
[0] => 240
[1] => 1899
[2] => 759
[3] => 530
)

[OPPO] => Array
(
[0] => 999
)

)

[7_DAY_2017] => Array
(
[OPPO] => Array
(
[0] => 300
[1] => 252
[2] => 1290
)

[LENOVO] => Array
(
[0] => 570
[1] => 1300
[2] => 666
)

)

)

Из этого я хочу получить массив

$output= [SAMSUNG => 9341, XIAOMI => 4807]

Здесь каждый элемент содержит сумму элементов во вложенном массиве.

В настоящее время мое решение содержит более 2 для каждого цикла, но есть ли способ оптимизировать это?

-2

Решение

С одной array_reduce функция:

// $arr is your initial array
$result = array_reduce($arr, function($r, $v){
if (isset($v['SAMSUNG'])) $r['SAMSUNG'] += array_sum($v['SAMSUNG']);
if (isset($v['XIAOMI'])) $r['XIAOMI'] += array_sum($v['XIAOMI']);
return $r;
}, ['SAMSUNG' => 0, 'XIAOMI' => 0]);
1

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

Вы можете использовать функции array_sum, array_map и array_column, чтобы получить результат

array_sum(array_map('array_sum', array_column($a, 'SAMSUNG')))
2

$sumArray = array();

foreach ($YourArray as $k=>$subArray) {
foreach ($subArray as $id=>$value) {
$sumArray[$id]+=$value;
}
}

print_r($sumArray);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector