1. array_sum() und count()
Die einfachste Methode, den Durchschnitt aller Werte in einem Array zu ermitteln, ist die Kombination aus array_sum($array) und count($array). array_sum() berechnet die Summe aller Werte im Array, count() wiederum die Anzahl der Werte. Die Summe muss dann nur noch durch die Anzahl geteilt werden. Aufpassen sollte man allerdings darauf, dass das Array auch tatsächlich Werte enthält — sonst würde man durch 0 teilen und einen Fatal Error erhalten.
<?php $arr = array(1, 1, 1, 1, 3, 3, 3, 3); $avg = (!empty($arr) ? array_sum($arr) / count($arr) : 0); var_dump($avg); ?>
int(2)
2. foreach-Schleife
Ebenfalls möglich ist die Anwendung einer foreach-Schleife. Diese iteriert über alle Werte im Array und berechnet währenddessen die Ergebnisse für Summe (vgl. vorheriges array_sum()) und Anzahl (vgl. vorheriges count()). Das ist langsamer als die Kombination aus array_sum() und count(), erlaubt es einem aber, bestimmte Werte nicht zu beachten. (Hier werden beispielsweise alle Werte explizit ausgeschlossen, die keine Integer sind.)
<?php $arr = array(1, 1, 1, 1, 3, 3, 3, 3); $sum = 0; $count = 0; foreach ($arr as $val) { if (is_int($val)) { $sum += $val; $count++; } } $avg = ($count>0 ? $sum/$count : 0); var_dump($avg); ?>
int(2)
3. Bei mehrdimensionalem Array
Auch der Durchschnitt eines mehrdimensionalen Arrays lässt sich leicht berechnen. Dazu muss nur die Funktion array_walk_recursive($array, $callback) verwendet werden, welche die Funktion $callback auf alle Elemente in $array anwendet, unabhängig davon, wie tief diese verschachtelt sind. Der Aufbau der Funktion gleicht der foreach-Schleife. Wieder werden Summe und Anzahl während des Iterierens gebildet.
<?php $arr = array(array(1, 1, 1, 1), array(3, 3, 3, 3)); $sum = 0; $count = 0; array_walk_recursive($arr, function($val, $key) use (&$sum, &$count) { if (is_int($val)) { $sum += $val; $count++; } }); $avg = ($count>0 ? $sum/$count : 0); var_dump($avg); ?>
int(2)