Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
   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  }