Как найти медиану массива
Короткий ответ
Отсортируйте массив и возьмите средний элемент; при чётном количестве — среднее двух средних:
<?php
function median(array $numbers): float
{
sort($numbers);
$count = count($numbers);
$middle = intdiv($count, 2);
return $count % 2 === 1
? $numbers[$middle]
: ($numbers[$middle - 1] + $numbers[$middle]) / 2;
}
echo median([7, 1, 3]), ' ', median([7, 1, 3, 5]);Результат:
3 4Чем медиана лучше среднего
Одно очень большое значение сильно сдвигает среднее, а медиану почти не меняет:
<?php
$salaries = [40, 45, 50, 55, 1000];
sort($salaries);
echo array_sum($salaries) / count($salaries), ' ', $salaries[intdiv(count($salaries), 2)];Результат:
238 50