示例:
$a[] = '56';
$a[] = '66';
$a[] = '';
$a[] = '58';
$a[] = '85';
$a[] = '';
$a[] = '';
$a[] = '76';
$a[] = '';
$a[] = '57';
实际上如何从这个数组中找出不包括空的平均值。请帮忙解决这个问题。
答案 0 :(得分:52)
首先你需要删除空值,否则平均值将不准确。
所以
$a = array_filter($a);
$average = array_sum($a)/count($a);
echo $average;
<强> DEMO 强>
更简洁和推荐的方式
if(count($a)) {
$a = array_filter($a);
echo $average = array_sum($a)/count($a);
}
<强> See here 强>
答案 1 :(得分:14)
接受的答案适用于示例值,但通常只使用array_filter($a)
可能不是一个好主意,因为它会过滤掉任何实际的零值以及零长度字符串。
偶数'0'
的计算结果为false,因此您应该使用明确排除零长度字符串的过滤器。
$a = array_filter($a, function($x) { return $x !== ''; });
$average = array_sum($a) / count($a);
答案 2 :(得分:2)
echo array_sum($a) / count(array_filter($a));
答案 3 :(得分:0)
作为后期查看,项目控件应通过数字检查来完成。否则,像这样的$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);
}