Суммируйте одно и то же имя ключа в многомерном массиве php

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

[0] => Array
(
[id_station] => 2397
[hour] => 12
[data] => Array
(
[cameraon] => 355654
[cameraoff] => 4532
[camerabroken] => 76745
...
)
)
[1] => Array
(
[id_station] => 2399
[hour] => 13
[data] => Array
(
[cameraon] => 3905466
[cameraoff] => 1672
[camerabroken] => 70780
...
)
)

Я хочу добавить еще одну строку = общее количество всех элементов

[1] => Array
(
[id_station] =>
[hour] =>
[data] => Array
(
[cameraon] => 4261120
[cameraoff] => 6204
[camerabroken] => 147525
)
)

я использовал array_sum(array_column($array["data], 'cameraon')) но я должен сделать для всех предметов cameraon, cameraoff, camerabroken (У меня есть сто предметов).

Есть ли способ получить общий ряд в этом случае?

1

Решение

Я предполагаю, что вы не знаете глубину data суб-массив. (это количество пар ключ-значение)

Так что сделайте, как показано ниже:

$final_array = [];
$final_array['id_station'] ='';
$final_array['hour'] ='';
foreach($original_array as $original_arr){
foreach($original_arr['data'] as $key=>$original){
$final_array['data'][$key] +=$original;
}
}

Выход:-https://eval.in/926729

0

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

Вы хотите суммировать столбчатые данные, поэтому используя array_sum() а также array_column() мудрый выбор. Осталось только настроить цикл.

Вы можете сначала изолировать data подмассивы с использованием array_column() затем «развернуть» до первого подмассива, чтобы перебрать каждый столбец. Используйте имена столбцов для доступа ко всем значениям во всех столбцах. Это делает метод динамически успешным независимо от сложности вашего data Подмассивы.

Код: (демонстрация)

$array=[
[
'id_station'=>2397,
'hour'=>12,
'data'=>['cameraon'=>355654,'cameraoff'=>4532,'camerabroken'=>76745]
],
[
'id_station'=>2399,
'hour'=>14,
'data'=>['cameraon'=>3905466,'cameraoff'=>1672,'camerabroken'=>70780]
]
];
$datas=array_column($array,'data');  // isolate the data subarrays
foreach(current($datas) as $column=>$data){  // iterate the columns
$result[$column]=array_sum(array_column($datas,$column));  // sum the column values
}
$array[]=['id_station'=>'','hour'=>'','data'=>$result];  // completenew item and append
var_export($array);  // print to screen

Выход:

array (
0 =>
array (
'id_station' => 2397,
'hour' => 12,
'data' =>
array (
'cameraon' => 355654,
'cameraoff' => 4532,
'camerabroken' => 76745,
),
),
1 =>
array (
'id_station' => 2399,
'hour' => 14,
'data' =>
array (
'cameraon' => 3905466,
'cameraoff' => 1672,
'camerabroken' => 70780,
),
),
2 =>
array (
'id_station' => '',
'hour' => '',
'data' =>
array (
'cameraon' => 4261120,
'cameraoff' => 6204,
'camerabroken' => 147525,
),
),
)
0

По вопросам рекламы [email protected]