我有一个像这样的数组:
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
我该如何创建这个数组?
答案 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 ];
}
它有一个递归检查,如果数组是多维的,检查值是否为数字,并设置返回数组中的计数和总和。
我尚未对此进行正确测试,但如果您获得所需的输出,请测试并告诉我。
修改强>
我会尽快扩展这个以计算重写密钥