计数和求和多维数组 php


Count and sum multidimensional array php

>我有一个这样的数组:

    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

如何创建此数组?

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

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

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 ];
}
它具有递归检查数组是否为

多维数组,检查值是否为数字,并在返回数组中设置计数和总和。

我还没有正确测试过,但请测试并让我知道您是否获得了所需的输出。

编辑
我将很快将其扩展到计算重复密钥