代码之家  ›  专栏  ›  技术社区  ›  sontd

在php多维数组中汇总相同的关键字名称

  •  1
  • sontd  · 技术社区  · 7 年前

    我有这样一个数组:

    [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 (我有一百件物品)。

    在这种情况下,有什么方法可以获得总行数吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Death-is-the-real-truth    7 年前

    我想你不知道 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

        2
  •  0
  •   mickmackusa Tom Green    7 年前

    您希望对列数据求和,以便利用 array_sum() array_column() 是明智的选择。剩下要做的唯一一件事就是设置循环。

    您可以首先隔离 data 子阵列使用 array\u列() 然后“深入”到第一个子数组以迭代每列。使用列名访问所有列中的所有值。这使得该方法在动态上成功,而与 数据 子阵列。

    代码:( Demo )

    $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,
        ),
      ),
    )