Die zehn kleinsten Werte in einem Array finden (Thema: PHP Beispiele)

Beispiele zum Finden einer bestimmten Anzahl von kleinsten Werten in einem Array in PHP

1. Per sort() und array_slice()

Der einfachste Weg, die zehn kleinsten Werte in einem Array zu finden, ist die Kombination aus sort($array) und array_slice($array, $start, $length) anzuwenden. Über sort() wird das Array aufsteigend sortiert (wer die Schlüssel beibehalten will verwendet asort()). Nach der Sortierung werden mit array_slice() die zehn ersten Werte des sortierten Arrays extrahiert. Entsprechend müssen an array_slice() $start=0 und $length=10 übergeben werden. Wie zu sehen ist, lässt sich die Anzahl der zu findenden Werte leicht ändern, indem $length erhöht oder verringert wird.

PHP-Code
<?php
	$arr = array(11, 10, 2, 9, 8, 4, 7, 6, 5, 1, 3);
	
	$arr2 = $arr; // $arr2 als Kope von $arr definieren, damit das urspruengliche Array nicht veraendert wird
	sort($arr2); // aufsteigend sortieren
	$arr2 = array_slice($arr2, 0, 10); // die ersten zehn Werte des sortierten Arrays auslesen
	var_dump($arr2);
?>

HTML-Code
array(10) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
  [7]=>
  int(8)
  [8]=>
  int(9)
  [9]=>
  int(10)
}


2. Mit foreach-Schleife

Die zehn kleinsten Werte selbst zu suchen, ohne dabei sort() zu verwenden, ist deutlich schwieriger. Im nachfolgenden Beispiel wird dazu mit einer foreach-Schleife über alle Werte im Array iteriert. Bei jeder Iteration wiederum wird der aktuelle Wert mit allen bisher gesammelten kleinsten Werten verglichen. Ist er kleiner als einer der Werte, dann wird er vor diesem im Rückgabearray einsortiert. (Der Vergleich beginnt beim kleinsten bisher gefundenen Wert, sodass die Reihenfolge am Ende korrekt ist.)

PHP-Code
<?php
	$arr = array(11, 10, 2, 9, 8, 4, 7, 6, 5, 1, 3);

	$out = array();
	$countToFind = 10;
	
	// ueber alle zu sortierenden Werte iterieren
	foreach ($arr as $val) {
		$added = false;
		// ueber alle bereits sortierten Werte iterieren und herausfinden,
		// ob der Wert vor einem einsortierten Wert eingefuegt werden muss
		foreach ($out as $key=>$val2) {
			// $val wird vor $val2 eingefuegt, wenn $val<$val2
			if ($val<$val2) {
				// neues out = alles vor $val2 + $val2 + alles nach $val2 (bis max 10 Elemente)
				$out = array_merge(array_slice($out, 0, $key), array($val), array_slice($out, $key, $countToFind-1-$key));
				$added = true;
				break;
			}
		}
		
		// Falls die Liste noch leer ist oder noch Platz hat
		// und der Wert nicht einsortiert wurde, wird er am Ende der Liste
		// eingefuegt
		if ((!isset($key) || $key<$countToFind-1) && !$added) {
			$out[] = $val;
		}
	}
	
	var_dump($out);
?>

HTML-Code
array(10) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
  [7]=>
  int(8)
  [8]=>
  int(9)
  [9]=>
  int(10)
}


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