如何从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中的数组中找到平均值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MASM 中找到浮点数组的平均值?

如何从数据框中的分类变量中找到定量变量的平均值? [复制]

如何循环表中的每个值并找到平均值

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

根据测试中的类平均值从数组 C# 输出平均值

php如何定义一个数组,输入9个任意的整数,求该数组中所有奇数的平均值。