>我有一个这样的数组:
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 ];
}
它具有递归检查数组是否为多维数组,检查值是否为数字,并在返回数组中设置计数和总和。
我还没有正确测试过,但请测试并让我知道您是否获得了所需的输出。
编辑
我将很快将其扩展到计算重复密钥