Funktion explode() - Zeichenkette trennen
In vielen Fällen liegen die Daten in einer Form vor, die für die Verarbeitung eine Trennung benötigen. Ein typisches Beispiel hierfür ist die Anschrift, bei der Vor- und Nachname, Straße und Hausnummer oder Postleitzahl und Ort häufig zusammen geschrieben werden. Es kann notwendig sein, solche Zeichenketten in einzelne Teile zu zerlegen, sodass man z.B. nur die Postleitzahl ohne den Ort erhält oder umgekehrt. Für solche Trennungen kann man in PHP die Funktion explode() verwenden.
Innerhalb der runden Klammern werden mit einem Komma getrennt zwei Parameter angegeben. Der erste Parameter gibt das Trennzeichen an und der zweite Parameter die Zeichenkette. Beim folgenden Beispiel enthält die Variable $str die Zeichenkette 01234 Musterhausen. Als Parameter wird ein Leerzeichen als Trennzeichen angegeben. Der Rückgabewert der Funktion explode() ist ein indiziertes Array. In diesem Beispiel wird der Rückgabewert im Array $einzeln[] gespeichert. Darüber hat man Zugriff auf die einzelnen Werte und kann sie z.B. ausgeben oder anderweitig verarbeiten.
<?php
$str = '01234 Musterhausen';
$einzeln = explode(' ', $str);
// Ausgabe untereinander 01234 Musterhausen
echo $einzeln[0] . '<br>';
echo $einzeln[1] . '<br>';
?>
Das Trennzeichen selbst wird quasi aus der Zeichenkette herausgeschnitten. Man kann als Trennzeichen natürlich nicht nur Leerzeichen angeben. Beim folgenden Beispiel ist als Trennzeichen X angegeben worden. Die Ausgabe des Arrays $einzeln[] bewirkt, dass die Buchstaben von A bis G ausgegeben werden.
<?php
$str = 'AXBXCXDXEXFXGX';
$einzeln = explode('X', $str);
// Ausgabe untereinander A B C D E F G
echo $einzeln[0] . '<br>';
echo $einzeln[1] . '<br>';
echo $einzeln[2] . '<br>';
echo $einzeln[3] . '<br>';
echo $einzeln[4] . '<br>';
echo $einzeln[5] . '<br>';
echo $einzeln[6] . '<br>';
?>
Man kann auch ein Wort mit zwei oder mehr Zeichen angeben, das als Trennungszeichen dient. Die Funktion explode() verarbeitet Zeichenketten case-sensitive, sodass zwischen Groß- und Kleinschreibung unterschieden wird. Beim folgenden Beispiel würde keine Trennung erfolgen, da das X klein geschrieben wurde. Der Rückgabewert ist im Falle einer nicht erfolgreichen Trennung die gesamte Zeichenkette und kann bei einer Zuweisung zu einem Array über den Index 0 ausgegeben werden.
<?php
$str = 'AXBXCXDXEXFXGX';
$einzeln = explode('x', $str);
// Ausgabe AXBXCXDXEXFXGX
echo $einzeln[0] . '<br>';
?>
Anzahl der Trennungen begrenzen
Man kann einen dritten Parameter angeben, der jedoch optional ist. Damit kann man die Anzahl der Teil-Strings festlegen, sodass eine Zeichenkette nicht beliebig zerteilt wird. Beim folgenden Beispiel erfolgt die Trennung in drei Teil-Strings.
<?php
$str = 'AXBXCXDXEXFXGX';
$einzeln = explode('X', $str, 3);
// Ausgabe untereinander A, B und CXDXEXFXGX
echo $einzeln[0] . '<br>';
echo $einzeln[1] . '<br>';
echo $einzeln[2] . '<br>';
?>
Gibt man den dritten Parameter an, so bedeutet eine Zahl größer als 0 die maximale Anzahl der Teil-Strings. Dabei ist ein etwaiger Rest der Zeichenkette im letzten Element enthalten. Wenn man eine 0 angibt, erfolgt im Grunde keine Trennung und hat denselben Effekt wie bei einer 1. Man kann auch negative Werte angeben. Dabei muss man das Vorkommen der Trennzeichen in der Zeichenkette rückwärts betrachten. Gibt man z.B. -3 an, so wird der linke Teil der Zeichenkette bis zum 3. Vorkommen des Trennzeichens (von rechts nach links betrachtet) getrennt und zurückgegeben. Der Rest (rechte Teil) entfällt sozusagen.
Beim folgenden Beispiel erfolgt die Trennung und Rückgabe der Buchstaben von A bis E, weil danach das Trennzeichen X (von rechts nach links betrachtet) das dritte mal vorkommt. Der rechte Teil ab dieser Stelle entfällt.
<?php
$str = 'AXBXCXDXEXFXGX';
$einzeln = explode('X', $str, -3);
// Ausgabe untereinander A B C D E
echo $einzeln[0] . '<br>';
echo $einzeln[1] . '<br>';
echo $einzeln[2] . '<br>';
echo $einzeln[3] . '<br>';
echo $einzeln[4] . '<br>';
?>
Somit bewirkt das Limitieren das Trennen und gleichzeitiges Entfernen eines Rests der Zeichenkette. Das Gegenstück zu explode() ist die Funktion implode(). Damit ist es möglich, die Teil-Strings aus einem Array zu einer Zeichenkette zu verbinden. Das Trennzeichen wird auch delimiter genannt und sollte bei explode() immer als erster Parameter vor dem string angegeben werden. Bei implode() ist dagegen auch die andere Reihenfolge möglich.