Ein Array in einen kommagetrennten String umwandeln (Thema: PHP Beispiele)

Wie ein Array aus Strings oder skalaren Werten in einen mit Kommata getrennten String umgewandelt werden kann

1. implode()

Zum „Verschmelzen” aller Wert in einem Array zu einem String wird die Funktion implode($delimiter, $array) verwendet. Der zweite Parameter ist das Array dessen Werte verbunden werden sollen, der erste Parameter ist das Trennzeichen zwischen diesen Werten (dürfen auch mehrere Zeichen sein). Die Rückgabe der Funktion ist ein String. Bei einem Array bestehend aus Wert1, Wert2 und Wert3 und einem String aus Trennzeichen T ist die Rückgabe von implode() entsprechend „Wert1TWert2TWert3”. Das nächste Beispiel demonstriert die Anwendung, hier enthält das Array die Werte a, b, c und d, während der Trennstring ein Komma gefolgt von einem Leerzeichen ist (", "):

PHP-Code
<?php
	$strs = array('a', 'b', 'c', 'd');
	$out = implode(', ', $strs);
	var_dump($out);
?>

HTML-Code: Ausgabe
string(10) "a, b, c, d"


2. foreach-Schleife

Das Verhalten von implode() lässt sich leicht über eine foreach-Schleife nachbilden. Im nachfolgenden Beispiel wird dies gezeigt. Wieder wird das selbe Array verwendet, diesmal muss aber zusätzlich das Ergebnis $out als Variable definiert werden. Beim Iterieren fügt die foreach-Schleife nacheinander jeden Wert zu $out hinzu, inklusive des Trennstrings ", ". Dabei muss darauf aufgepasst werden, dass der Trennstring nicht vor dem ersten Wert und auch nicht nach dem letzten Wert steht (", a..." bzw. "...d, "). Um dies zu verhindern, wird hier vor dem Hinzufügen jeweils geprüft, ob $out noch leer ist. Falls es nicht mehr leer ist, wird der Trennstring und dann der Wert hinzugefügt, sonst nur der Wert (welcher sich dann ganz am Anfang befindet). Im Vergleich zu implode() bietet eine foreach-Schleife mehr Flexibilität. Dies wird hier dargestellt, indem zu jedem Wert auch der Schlüssel hinzugefügt wird. Ebenfalls denkbar wäre es zum Beispiel, jeden zweiten Wert farblich anders zu hinterlegen.

PHP-Code
<?php
	$strs = array('a', 'b', 'c', 'd');
	$out = '';
	foreach ($strs as $key=>$val) {
		// Kein Trennstring vor dem allerersten Wert, daher der bedingte Ausdruck.
		// Hier wird beispielhaft zusatzlich der Schluessel hinzugefuegt ("Schluessel=Wert"), was bei implode() nicht moeglich ist.
		$out .= ($out!=='' ? ", $key=$val" : "$key=$val");
	}
	var_dump($out);
?>

HTML-Code: Ausgabe
string(18) "0=a, 1=b, 2=c, 3=d"


3. array_reduce()

Eine weitere Alternative bietet die Funktion array_reduce($array, $callback). Diese ruft für jedes Paar von zwei Werten die Callbackfunktion $callback auf, welche die zwei Werte zu einem einzelnen reduziert. Das wird so lange wiederholt, bis das Array nur noch aus einem Wert besteht. Entsprechend müssen bei jedem Aufruf nur die beiden Werte zu einem String mit dem Trennstring dazwischen umgewandelt werden. Das nächste Beispiel zeigt die Anwendung von array_reduce():

PHP-Code
<?php
	$strs = array('a', 'b', 'c', 'd');
	$out = array_reduce($strs, function($left, $right) {
		// array_reduce startet "vor" dem ersten Wert, mit $left=null und $right="a".
		// Ohne diesen bedingten Ausdruck wuerde man entsprechend in der Rueckgabe ein Komma vor dem "a" erhalten.
		return ($left===null ? $right : "$left, $right");
	});
	var_dump($out);
?>

HTML-Code: Ausgabe
string(10) "a, b, c, d"


Kommentare (0)

Von neu nach alt