计算和求和多维数组php

时间:2016-02-03 10:28:55

标签: php arrays multidimensional-array count sum

我有一个像这样的数组:

    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

(当然要长一些) 我需要用相同的密钥对所有值求和并计算具有相同密钥的多少个值> 0(因为我必须找到所有数字的平均值> 0

我的预期结果是

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

我该如何创建这个数组?

2 个答案:

答案 0 :(得分:1)

PHP中有一个内置函数来计算数组中所有元素的总和。在这里,这将为您提供预期的输出:

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

答案 1 :(得分:0)

我已经考虑过这个,并提出了一个解决方案(我认为......),它以函数的形式出现,它是这样的:

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 ];
}

它有一个递归检查,如果数组是多维的,检查值是否为数字,并设置返回数组中的计数和总和。

我尚未对此进行正确测试,但如果您获得所需的输出,请测试并告诉我。

修改
我会尽快扩展这个以计算重写密钥