簡體   English   中英

匯總php多維數組中的相同鍵名

[英]Summarize the same key name in php multidimensional array

我有一個像這樣的數組:

[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'))但我必須對cameraoffcamerabrokencameraoff所有項目cameraon 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()是明智的選擇。 剩下要做的唯一事情就是建立循環。

您可以先使用array_column()隔離dataarray_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,
    ),
  ),
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM