2

I have the following collection that contains the arrays below:

  #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"

    ]
  ]

I am trying to sum clicks and average views but in my try I get the wrong data:

   $sum = 0;

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

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

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

    }

    dd($sum);

This was my try to sum but didnt get the right results

Desired output

   array:2 [

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

    ]
2
  • There is no total_income key in those arrays... Commented Feb 9, 2018 at 12:47
  • "views"=> array_sum(array_column($data, 'views')), Commented Feb 9, 2018 at 12:52

4 Answers 4

6

Use $sum as array and get correct value of multiarray:

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

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

dd($sum);
Sign up to request clarification or add additional context in comments.

Comments

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

this is also a clean and easy way .

Comments

0

You can use array_reduce instead

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

Comments

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 );

This is the easiest way to do your work.

Result:

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.