public static function lehmerMean(array $numbers, $p)
{
// Special cases for infinite p
if ($p == -\INF) {
return min($numbers);
}
if ($p == \INF) {
return max($numbers);
}
// Standard case for non-infinite p
$∑xᵢᵖ = array_sum(array_map(function ($x) use($p) {
return $x ** $p;
}, $numbers));
$∑xᵢᵖ⁻¹ = array_sum(array_map(function ($x) use($p) {
return $x ** ($p - 1);
}, $numbers));
return $∑xᵢᵖ / $∑xᵢᵖ⁻¹;
}