PHP program to compute standard deviation
Find standard deviation of array of inputs in PHP.
function standard_deviation(array $input): float
{
// sanitize empty array elements and non numerics but allow zero values
$input = array_filter($input, static function ($v) {
return ! in_array($v, [false, null, ''], true) && is_numeric($v);
});
$count = count($input);
$result = 0.0;
if ($count === 0) {
// throw exception OR return $result if you want to return zero
throw new RuntimeException('Cannot compute standard deviation without input');
}
$avg = array_sum($input) / $count;
foreach ($input as $i) {
$result += ($i - $avg) ** 2;
}
return number_format(sqrt($result / $count), 4); // increase '4' value for more precision if needed
}
PHP Unit tests
/**
* @test
*/
public function standard_deviation_computes_correctly(): void
{
$scenarios = [
[
'expectation' => 1.3437,
'input' => [
-1, 0, '0', 1, '2', 3, '',
],
],
[ // test with non numerics
'expectation' => 1.8548,
'input' => [
'xyz', '-1', '0', 3.14159, '3.14159'
],
],
];
foreach ($scenarios as $scenario) {
self::assertSame(
$scenario['expectation'],
standard_deviation($scenario['input'])
);
}
}