Ein Array in Zehnergruppen von Werten unterteilen (Thema: PHP Beispiele)

Wie ein Array in Zehner- oder beliebige andere Gruppen von Werten eingeteilt werden kann

Schnellübersicht
Existiert ein Array $arr mit den Werten $a, $b, $c, ... und sollen diese Werte in Blöcke von $n Werten eingeteilt werden, sodass jeder Block zu einem Unterarray von $arr wird und maximal $n Elemente enthält, dann kann dafür array_chunk($arr, $n) verwendet werden. Mini-Beispiel: $arr = array_chunk(array(1, 2, 3), 2); ergibt: array(array(1, 2), array(3)).

1. array_chunk

Die Funktion array_chunk($array, $size) nimmt ein Array $array entgegen und teilt dieses in „Blöcke” auf, die jeweils (maximal) $chunkSize Werte enthalten. Die Rückgabe ist daher ein mehrdimensionales Array.

Im nächsten Beispiel wird zunächst ein Array definiert, welches die Zahlen von 1 bis 105 als Werte enthält. Mittels array_chunk() wird dieses Array in Blöcke von jeweils maximal 10 Elementen eingeteilt, wodurch sich 10 Blöcke von je 10 Elementen und ein Block von 5 Elementen ergeben. Am Ende werden diese Blöcke ausgegeben, wobei die Werte jedes einzelnen Blocks jeweils in einen kommagetrennten String umgewandelt werden.

PHP-Code: array_chunk() verwenden, um Arrays leicht in Blöcke von Werten einzuteilen
<?php
	$arr = range(1, 105);
	$chunks = array_chunk($arr, 10);
	// Ausgabe
	foreach ($chunks as $key=>$chunk) {
		echo("$key: " . implode(', ', $chunk) . "\n");
	}
?>

HTML-Code: Ausgabe
0: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
2: 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
3: 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
4: 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
5: 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
6: 61, 62, 63, 64, 65, 66, 67, 68, 69, 70
7: 71, 72, 73, 74, 75, 76, 77, 78, 79, 80
8: 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
9: 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
10: 101, 102, 103, 104, 105


2. Eine eigene Implementierung der Funktion array_chunk()

Nachfolgend wird beispielhaft erläutert, wie die Funktionsweise von array_chunk() durch eigenen Code nachgebildet werden könnte. Das Vorgehen ist dabei vergleichsweise einfach: Es wird eine foreach-Schleife implementiert, welche über alle Elemente im (Beispiel-)Array $arr iteriert. Während des Iterierens werden zwei Arrays, $out und $current, gebildet. $out enthält am Ende das Ergebnisarray (ursprüngliches Array eingeteilt in Zehnerblöcke), $current wird jeweils Stück für Stück mit bis zu zehn Elementen gefüllt, dann in $out geschrieben und wieder geleert. Entsprechend überträgt die foreach-Schleife während des Iterierens jedes Element in $current und prüft anschließend, ob entweder $current voll ist (zehn Elemente enthält) oder alternativ das Ende des Arrays $arr erreicht wurde. Falls einer dieser Punkte erfüllt ist, wird $current an $out angehängt und mit einem leeren Array überschrieben.

PHP-Code: Mit einer foreach-Schleife die Funktionalität von array_chunk() nachbilden
<?php
	$arr = range(1, 105);
	$out = array();
	$current = array();
	foreach ($arr as $key=>$val) {
		$current[] = $val;
		if (isset($current[9]) || !isset($arr[$key + 1])) {
			$out[] = $current;
			$current = array();
		}
	}
	
	// Ausgabe
	foreach ($out as $key=>$chunk) {
		echo("$key: " . implode(', ', $chunk) . "\n");
	}
?>

HTML-Code: Ausgabe
0: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
2: 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
3: 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
4: 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
5: 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
6: 61, 62, 63, 64, 65, 66, 67, 68, 69, 70
7: 71, 72, 73, 74, 75, 76, 77, 78, 79, 80
8: 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
9: 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
10: 101, 102, 103, 104, 105


Der zuvor auf Blöcke von 10 Werten ausgelegte Code soll nun verallgemeinert werden. Dazu wird eine Funktion chunkValues($values, $chunkSize) definiert, welche das Array $values in Blöcke einteilt, die jeweils maximal $chunkSize Elemente enthalten. Der Code der Funktion ist nahezu identisch mit dem vorherigen Beispiel. Diesmal wird am Anfang noch array_values($values) ausgeführt, um sicherzustellen, dass das Array fortlaufend durchnummeriert ist (0, 1, 2, 3, ...). (array_values() gibt die Werte des übergebenen Arrays mit neuen Schlüsseln von 0 bis n zurück.) Zudem wurde die Bedingung isset($current[9]) abstrahiert und durch isset($current[$chunkSize - 1]) ersetzt.

PHP-Code: Die vorherige foreach-Schleife als verallgemeinerte Funktion
<?php
	function chunkValues($values, $chunkSize) {
		$values = array_values($values);
		$out = array();
		$current = array();
		foreach ($values as $key=>$val) {
			$current[] = $val;
			if (isset($current[$chunkSize - 1]) || !isset($values[$key + 1])) {
				$out[] = $current;
				$current = array();
			}
		}
		return $out;
	}
	
	$arr = range(1, 105);
	$chunks = chunkValues($arr, 13);
	
	// Ausgabe
	foreach ($chunks as $key=>$chunk) {
		echo("$key: " . implode(', ', $chunk) . "\n");
	}
?>

HTML-Code: Ausgabe
0: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
1: 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
2: 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
3: 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52
4: 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65
5: 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78
6: 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91
7: 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104
8: 105


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