如何在php中从数组中找到平均值


How to find average from array in php?

示例:

$a[] = '56';
$a[] = '66';
$a[] = '';
$a[] = '58';
$a[] = '85';
$a[] = '';
$a[] = '';
$a[] = '76';
$a[] = '';
$a[] = '57';

实际上,如何从这个数组中找到排除空的平均值。请帮助解决这个问题。

首先需要删除空值,否则平均值将不准确。

所以

$a = array_filter($a);
$average = array_sum($a)/count($a);
echo $average;

演示

更简洁和推荐的方式

$a = array_filter($a);
if(count($a)) {
    echo $average = array_sum($a)/count($a);
}

请参阅此处

接受的答案适用于示例值,但通常简单地使用array_filter($a)可能不是一个好主意,因为它会过滤掉任何实际的零值以及零长度字符串。

即使'0'的计算结果为false,也应该使用明确排除零长度字符串的筛选器。

$a = array_filter($a, function($x) { return $x !== ''; });
$average = array_sum($a) / count($a);
echo array_sum($a) / count(array_filter($a));

作为一种新的方法,项控件应该使用数字检查来完成。否则,像这样的$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