Anbei eine kleine Funktion, die verschiedene Mittelwerte berechnet:
// ########################################################################
// Berechnung von diversen Mittelwerten
// Parameter: 1. Array mit beliebig vielen Integerzahlen (mind. 1)
// 2. Typ des zu berechnenden Mittelwerts
// A = Arithm. Mittelwert
// E = Modus (größter Wert)
// M = Median
// Q = Quadratisches Mittel
// C = Kubisches Mittel
// H = Harmonisches Mittel
// G = Geometrisches Mittel
// Ergebnis: Mittelwert oder bei Fehler -999999
// s. a. https://de.wikipedia.org/wiki/Mittelwert#Sonstige_Mittelwerte
// V 1.0 (c) 6/2016 udegens knx-mh@gmx.de
// ########################################################################
function X17_ComputeMeans($arry, $type = 'A')
{
$sum = 0;
$cnt = 0;
$m = -999999; // ERROR
$c = count($arry);
if($c == 0)
return $m;
if($type == 'A' or $type == 'a')
{
foreach($arry as $val)
{
$sum += $val;
$cnt++;
}
if($cnt > 0)
$m = (int)($sum / $cnt);
}
else if($type == 'E' or $type == 'e')
{
sort($arry);
$c = count($arry);
$highidx = 0;
$highcnt = 0;
for($i=0; $i<$c; $i++)
{
for($j=$i+1; $j<$c; $j++)
{
$cnt = 0;
//echo "Vergleiche: $arry[$i] mit $arry[$j]<br>";
if($arry[$i] == $arry[$j])
{
//echo "Gleichheit ";
$cnt++;
//echo "<br>";
continue;
}
else
{
//echo "Ungleichheit ";
if($cnt >= $highcnt)
{
$highcnt = $cnt;
$highidx = $i-1;
$i = $j;
//echo "<br>";
continue;
}
}
}
}
$m = $arry[$highidx];
}
else if($type == 'M' or $type == 'm')
{
sort($arry);
if($c % 2 == 0) // even
{
$idx = $c / 2;
$sum = $arry[$idx-1] + $arry[$idx];
$m = $sum / 2;
}
else
{
$idx = (int)($c / 2) + 1;
$m = $arry[$idx];
}
}
else if($type == 'Q' or $type == 'q')
{
foreach($arry as $val)
{
$sum += $val*$val;
$cnt++;
}
if($cnt > 0)
$m = (int)(sqrt($sum/$cnt));
}
else if($type == 'C' or $type == 'c')
{
foreach($arry as $val)
{
$sum += $val*$val*$val;
$cnt++;
}
if($cnt > 0)
$m = (int)(pow($sum, 1/3));
}
else if($type == 'H' or $type == 'h')
{
foreach($arry as $val)
{
$sum += 1/($val*$val);
$cnt++;
}
if($cnt > 0)
$m = (int)($cnt/$sum);
}
else if($type == 'G' or $type == 'g')
{
$sum = 1;
foreach($arry as $val)
{
$sum *= $val;
$cnt++;
}
if($cnt > 0)
$m = (int)(pow($sum, 1/$cnt));
}
return (int)$m;
}// ###