Mean::checkArrayLength()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Phpml\Math\Statistic;
6
7
use Phpml\Exception\InvalidArgumentException;
8
9
class Mean
10
{
11
    /**
12
     * @throws InvalidArgumentException
13
     */
14
    public static function arithmetic(array $numbers): float
15
    {
16
        self::checkArrayLength($numbers);
17
18
        return array_sum($numbers) / count($numbers);
19
    }
20
21
    /**
22
     * @return float|mixed
23
     *
24
     * @throws InvalidArgumentException
25
     */
26
    public static function median(array $numbers)
27
    {
28
        self::checkArrayLength($numbers);
29
30
        $count = count($numbers);
31
        $middleIndex = (int) floor($count / 2);
32
        sort($numbers, SORT_NUMERIC);
33
        $median = $numbers[$middleIndex];
34
35
        if ($count % 2 === 0) {
36
            $median = ($median + $numbers[$middleIndex - 1]) / 2;
37
        }
38
39
        return $median;
40
    }
41
42
    /**
43
     * @return mixed
44
     *
45
     * @throws InvalidArgumentException
46
     */
47
    public static function mode(array $numbers)
48
    {
49
        self::checkArrayLength($numbers);
50
51
        $values = array_count_values($numbers);
52
53
        return array_search(max($values), $values, true);
54
    }
55
56
    /**
57
     * @throws InvalidArgumentException
58
     */
59
    private static function checkArrayLength(array $array): void
60
    {
61
        if (count($array) === 0) {
62
            throw new InvalidArgumentException('The array has zero elements');
63
        }
64
    }
65
}
66