Den Durchschnitt aller Werte in einem Array bilden (Thema: PHP Beispiele)

Mögliche Wege zur Berechnung des Durchschnitts aller Werte in einem Array in PHP

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-Code
<?php
	$arr = array(1, 1, 1, 1, 3, 3, 3, 3);
	$avg = (!empty($arr) ? array_sum($arr) / count($arr) : 0);
	var_dump($avg);
?>

HTML-Code
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-Code
<?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);
?>

HTML-Code
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-Code
<?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);
?>

HTML-Code
int(2)


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK