如何对多维数组中的特定键进行求和和计数

时间:2018-02-09 12:46:00

标签: php arrays

我有以下包含以下数组的集合:

  #items: array:2 [▼
    0 => array:13 [▼

      "label" => "00000000-N/A"
      "views" => 980
      "clicks" => 444
      "form_submissions_perc" => "100.0"

    ]
    1 => array:13 [▼

      "label" => "1111-N/A"
      "views" => 323
      "clicks" => 1009
      "form_submissions_perc" => "100.0"

    ]
  ]

我正在尝试对点击次数和平均值进行求和,但在我的尝试中,我得到了错误的数据:

   $sum = 0;

    foreach ($data as $k => $subArray) {

        foreach ($subArray as $id => $value) {

            $sum += $subArray['views'];
        }

    }

    dd($sum);

这是我尝试总结但没有得到正确的结果

期望的输出

   array:2 [

       "views"=> 1303,
       "clicks"=> 1451

    ]

4 个答案:

答案 0 :(得分:6)

使用$sum作为数组并获取正确的多阵列值:

$sum = array(
       'clicks' => 0,
       'views' => 0
       );

foreach ($data as $id => $value) {
    $sum['clicks'] += $value['clicks'];
    $sum['views'] += $value['views'];
}

dd($sum);

答案 1 :(得分:1)

   foreach ($data as $k => $subArray) {
        $valueSum[] = $subArray['views'];
        $clickSum[] = $subArray['clicks'];
    }
    echo array_sum($valueSum);
    echo array_sum($clickSum);

这也是一种简洁明了的方式。

答案 2 :(得分:0)

$data = [
            [
                "label"                 => "00000000-N/A",
                "views"                 => 980,
                "clicks"                => 444,
                "form_submissions_perc" => "100.0"
            ],
            [
                "label"                 => "1111-N/A",
                "views"                 => 323,
                "clicks"                => 1009,
                "form_submissions_perc" => "100.0"
            ]
        ];

        $result['views']  = array_sum( array_column( $data, 'views' ) );
        $result['clicks'] = array_sum( array_column( $data, 'clicks' ) );

        dd( $result );

这是开展工作的最简单方法。

结果:

Array ( [views] => 1303 [clicks] => 1453 )

答案 3 :(得分:0)

您可以使用array_reduce代替

$data = array_reduce($array, function ($old, $new) {
    return [
        "view" => $old["view"] + $new["view"],
        "clicks" => $old["clicks"] + $new["clicks"]
    ];
}, ["view" => 0, "clicks" => 0]);

print '<pre>';
print_r($data);