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

时间:2015-11-01 10:56:37

标签: php arrays average

示例:

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

实际上如何从这个数组中找出不包括空的平均值。请帮忙解决这个问题。

4 个答案:

答案 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);
}

积分:froq.util.Arrays