9 months ago

PHP program to compute standard deviation

#PHP
#PHP Unit

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'])
        );
    }
}