示例:
$a[] = '56';
$a[] = '66';
$a[] = '';
$a[] = '58';
$a[] = '85';
$a[] = '';
$a[] = '';
$a[] = '76';
$a[] = '';
$a[] = '57';
实际上如何从这个数组中找到不包括空值的平均值。请帮忙解决这个问题。
count
检查。 - Olegcount()
函数的双重使用会增加不必要的开销。你可以选择 $count = count($a);
或者 if($a)
。两种方法都足够好。我会使用 if($a)
,因为它避免了在空数组上调用 count()
,但对于刚开始学习该语言的人来说可能更难理解。 - Ismael Miguel接受的答案对于示例值有效,但通常仅使用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);
}
$a[] = 56;
代替$a[] = '56';
。 - Avatar