String an bestimmten Zeichen trennen (Thema: PHP Beispiele)

PHP-Funktionen, um Strings an bestimmten Zeichen zu trennen und so Arrays zu erzeugen

1. explode()

Strings können mit explode($zeichen, $string) an bestimmten Zeichen getrennt bzw. aufgesplittet werden. Es ergibt sich dann ein Array, welches 0 bis n Strings enthält.

PHP-Code
<?php
	$tagsAsString = 'Essen, Birne, Schokolade, Eis';
	$tagsAsArray = explode(',', $tagsAsString);
	var_dump($tagsAsArray);
?>

HTML-Code: Ausgabe
array(4) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(6) " Birne"
  [2]=>
  string(11) " Schokolade"
  [3]=>
  string(4) " Eis"
}


2. Überflüssige Leerzeichen entfernen

Häufig erhält man — wie im vorherigen Beispiel — Teilstücke des Strings, die noch unerwünschte Leerzeichen am Anfang oder am Ende enthalten. Diese können mit trim() entfernt werden. Mit array_map() oder array_walk() wiederum kann trim() auf jeden Eintrag des Arrays angewendet werden.

Bei Verwendung von array_map():

PHP-Code: array_map
<?php
	$tags = explode(',', 'Beispieltag1, Beispieltag2, Beispieltag3,Beispieltag4');
	$tags = array_map('trim', $tags);
	var_dump($tags);
?>

HTML-Code: Ausgabe
array(4) {
  [0]=>
  string(12) "Beispieltag1"
  [1]=>
  string(12) "Beispieltag2"
  [2]=>
  string(12) "Beispieltag3"
  [3]=>
  string(12) "Beispieltag4"
}


Bei Verwendung von array_walk():

PHP-Code: array_walk
<?php
	$tags = explode(',', 'Beispieltag1, Beispieltag2, Beispieltag3,Beispieltag4');
	array_walk($tags, function(&$val) { $val = trim($val); });
	var_dump($tags);
?>

HTML-Code: Ausgabe
array(4) {
  [0]=>
  string(12) "Beispieltag1"
  [1]=>
  string(12) "Beispieltag2"
  [2]=>
  string(12) "Beispieltag3"
  [3]=>
  string(12) "Beispieltag4"
}


3. Leere Elemente aus dem Ergebnisarray entfernen

Im Ergebnis von explode() können auch leere Strings als Arrayelemente enthalten sein. Je nach Verwendungszweck ist dies möglicherweise nicht erwünscht. Zum Entfernen dieser kann array_diff($arr1, $arr2) benutzt werden, alle Elemente aus $arr1 entfernt, die auch in $arr2 vorkommen.

PHP-Code
<?php
	$tagsAsString = 'Essen,Birne,,Schokolade';
	$tagsAsArray = explode(',', $tagsAsString);
	var_dump($tagsAsArray);
	var_dump(array_diff($tagsAsArray, array('')));
?>

HTML-Code: Ausgabe
array(4) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(5) "Birne"
  [2]=>
  string(0) ""
  [3]=>
  string(10) "Schokolade"
}
array(3) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(5) "Birne"
  [3]=>
  string(10) "Schokolade"
}


4. explode() mit längerem String

explode() muss nicht zwangsweise mit einem String als Trennzeichen aufgerufen werden, welcher nur ein einziges Zeichen enthält. Es ist auch erlaubt, mehrere zu übergeben. Getrennt wird dann, wenn diese Zeichen in der Reihenfolge auftauchen, in der sie übergeben wurden.

PHP-Code
<?php
	$tagsAsString = 'Essen()Birne()Schokolade)(Eis';
	$tagsAsArray = explode('()', $tagsAsString);
	var_dump($tagsAsArray);
?>

HTML-Code: Ausgabe
array(3) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(5) "Birne"
  [2]=>
  string(15) "Schokolade)(Eis"
}


5. String anhand eines regulären Ausdrucks aufteilen

Die Funktion preg_split($regex, $str) kann verwendet werden, um $str anhand des regulären Ausdrucks $regex aufzutrennen. Im nachfolgenden Beispiel werden die Tags nach belieben durch Kommata, Semikolons oder Schrägstriche getrennt. Entsprechend wird nach diesen Zeichen gesucht. Zudem werden Leerzeichen direkt vor und nach dem Trennzeichen ebenfalls als Teil des Trennzeichens gesehen.

PHP-Code
<?php
	// Die Trennzeichen, aber so markiert, dass sie nicht mehr als Regex-Steuerungszeichen
	// interpretiert werden
	$trennzeichen = preg_quote(',;/');

	// Der regulaere Ausdruck:
	// beliebig viele Leerzeichen, dann 1 bis n Trennzeichen, dann beliebig viele Leerzeichen
	$regex = '\s*['.$trennzeichen.']+\s*';

	// Zu trennender String
	$tagsAsString = 'Essen, Birne; Schokolade ,, Eis    /Sahne';

	// split-Kommando
	$tagsAsArray = preg_split('='.$regex.'=u', $tagsAsString);

	// Ausgabe
	var_dump($tagsAsArray);
?>

HTML-Code: Ausgabe
array(5) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(5) "Birne"
  [2]=>
  string(10) "Schokolade"
  [3]=>
  string(3) "Eis"
  [4]=>
  string(5) "Sahne"
}


6. String anhand mehrerer beliebiger Zeichen auftrennen

Das vorherige Beispiel zu preg_split() kann weitergeführt werden, um daraus eine Funktion zu bauen, die einen beliebigen String an beliebig gewählten Trennzeichen auftrennt. In diesem Beispiel wird die Funktion „splitByChars” definiert, welche als ersten Parameter den zu trennenden String und als zweiten die Trennzeichen als String erwartet. Optional können die Trennzeichen auch als Array übergeben werden. Rückgabe ist ein Array mit 0 bis n Strings als Elementen.

PHP-Code
<?php
	function splitByChars($str, $chars) {
		$regex = (is_array($chars) ? implode('', $chars) : $chars);
		$regex = preg_quote($chars);
		$regex = addcslashes($chars, '=');
		$regex = '\s*['.$regex.']+\s*';
		return preg_split('='.$regex.'=u', $str);
	}

	$tagsAsString = 'Essen, Birne; Schokolade, Eis === Sahne ~ Beispiel';
	var_dump(splitByChars($tagsAsString, ',;/='));
?>

HTML-Code: Ausgabe
array(5) {
  [0]=>
  string(5) "Essen"
  [1]=>
  string(5) "Birne"
  [2]=>
  string(10) "Schokolade"
  [3]=>
  string(3) "Eis"
  [4]=>
  string(16) "Sahne ~ Beispiel"
}


7. String in Blöcke mit fester Länge aufteilen

Die Funktion str_split($str, $length) dient dazu, einen String in mehrere kleinere Strings fester Maximallänge aufzuteilen. Sie erwartet als ersten Parameter den aufzuteilenden String und als zweiten die Maximallänge pro Block.

PHP-Code
<?php
	$str = '0123456789';
	$arr = str_split($str, 3);

	// $arr enthaelt die Strings 012, 345, 678 und 9
	// mit implode(' / ', $arr) werden diese in einen einzelnen String
	// umgewandelt, in welchen die Bloecke durch Schraegstriche getrennt sind
	echo( implode(' / ', $arr) );
?>

HTML-Code: Ausgabe
012 / 345 / 678 / 9

Kommentare (1)

Von neu nach alt
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ArnoNuehm (Gast) #