У меня есть такой массив:
[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
(У меня есть сто предметов).
Есть ли способ получить общий ряд в этом случае?
Я предполагаю, что вы не знаете глубину 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
Вы хотите суммировать столбчатые данные, поэтому используя 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,
),
),
)