0

I have an array like this one:

    array (size=1)
  0 => 
    array (size=33)
      0 => int 126
      1 => int 43
      2 => int 4
      3 => int 0
      4 => int 3
      5 => int 3
      6 => int 30
      7 => int 15
      8 => int 22
      9 => int 27
      10 => int 22
      11 => int 46
      12 => int 0
      13 => int 8
      14 => int 14
      15 => int 8

array (size=1)
  1 => 
    array (size=33)
      0 => int 273
      1 => int 3
      2 => int 4
      3 => int 28
      4 => int 36
      5 => int 19
      6 => int 142
      7 => int 81
      8 => int 59
      9 => int 71
      10 => int 88
      11 => int 47
      12 => int 42
      13 => int 0
      14 => int 12
      15 => int 97

(of course it is way longer) and I need both to sum all the value with the same key and count how many values with the same key are >0 (cause I have to find the avarage of all the numbers >0

My expected result is

0=>
   'sum' => 399
   'count'=>2
1=>
   'sum' =>46
   'count'=>2

how can I create this array?

3
  • 1
    have you tried anything yet? Commented Feb 3, 2016 at 10:30
  • Are these 2 separate arrays or one multidimensional? Commented Feb 3, 2016 at 10:39
  • It's multidimensional Commented Feb 3, 2016 at 10:49

2 Answers 2

1

There's an inbuilt function in PHP to count the sum of all the elements of an array. Here, this will give you your expected output :

<?php
    $arr = [[10, 20, 30, 40], [10, 20, 30], [10, 20, 30, 4]];
    // Let the magic happen...
    $yourArray = array_map(function ($el){ return ["sum" => array_sum($el), "count" => count($el)]; }, $arr);

    print_r($yourArray);
?>
Sign up to request clarification or add additional context in comments.

Comments

0

I have thought about this, and came up with a solution (I think...), it comes in the form of a function and it goes like this:

function getSumAndCount(array $arr)
{
    $sum = 0;
    $count = 0;
    foreach ($arr as $v)
    {
        $count++;
        if (is_array($v))
        {
            $next = getSumAndCount($v);
            $count += $next['count'];
            $sum += $next['sum'];
        }
        else
        {
            !is_numeric($v) ?: $sum += $v;
        }
    }

    return [ 'sum' => $sum, 'count' => $count ];
}

It has a recursive check to if the array is multidimensional, checks if the value is numeric and sets the count and sum in a return array.

I haven't tested this properly as yet, but please test and let me know if you get the desired output.

EDIT
I will extend this to count dupe keys soon

1 Comment

Uhm it seems like it's summing all the array values, while I need all the values with the same key

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.