如何从php中的数组中找到平均值?
Posted
技术标签:
【中文标题】如何从php中的数组中找到平均值?【英文标题】:How to find average from array in php? 【发布时间】:2016-02-01 09:08:21 【问题描述】:例子:
$a[] = '56';
$a[] = '66';
$a[] = '';
$a[] = '58';
$a[] = '85';
$a[] = '';
$a[] = '';
$a[] = '76';
$a[] = '';
$a[] = '57';
实际上如何从这个数组中找到除空之外的平均值。请帮忙解决这个问题。
【问题讨论】:
不应将整数定义为字符串。而不是$a[] = '56';
应该是$a[] = 56;
【参考方案1】:
echo array_sum($a) / count(array_filter($a));
【讨论】:
你需要做 count(array_filter($a)) 以不包含空值。【参考方案2】:首先你需要删除空值,否则平均值将不准确。
所以
$a = array_filter($a);
$average = array_sum($a)/count($a);
echo $average;
DEMO
更简洁和推荐的方式
$a = array_filter($a);
if(count($a))
echo $average = array_sum($a)/count($a);
See here
【讨论】:
请记住,您应该首先检查以确保 count() 为正数,否则您将得到除以零的错误 array_filter 也会删除零,使平均值偏斜。 @MiloLaMar:是的,请查看下面的 Don't Panic 答案。 你应该在过滤掉空值后让count
检查
count()
的双重使用会因多次调用count()
而增加一些不必要的开销。您可以使用$count = count($a);
或直接使用if($a)
。两者都是足够好的解决方案。我会使用if($a)
,这样可以节省在空数组上调用count()
,但对于那些开始学习该语言的人来说更难理解。【参考方案3】:
接受的答案适用于示例值,但通常简单地使用 array_filter($a)
可能不是一个好主意,因为它会过滤掉任何实际的零值以及零长度字符串。
即使'0'
的计算结果为 false,因此您应该使用明确排除零长度字符串的过滤器。
$a = array_filter($a, function($x) return $x !== ''; );
$average = array_sum($a) / count($a);
【讨论】:
使用 php 7.4+,您可以使用 arrow function 的语法来执行array_filter($a, fn($x)=>$x !== '');
。【参考方案4】:
作为一个迟到的外观,项目控制应该用数字检查来完成。否则像 $array = [1.2, 0.33, [123]]
这样的东西会破坏计算:
// Get numerics only.
$array = array_filter($array, fn($v) => is_numeric($v));
// Get numerics only where value > 0.
$array = array_filter($array, fn($v) => is_numeric($v) && ($v > 0));
最后:
public static function average(array $array, bool $includeEmpties = true): float
$array = array_filter($array, fn($v) => (
$includeEmpties ? is_numeric($v) : is_numeric($v) && ($v > 0)
));
return array_sum($array) / count($array);
致谢:froq.util.Arrays
【讨论】:
以上是关于如何从php中的数组中找到平均值?的主要内容,如果未能解决你的问题,请参考以下文章