Die Funktion explode() zerlegt einen String anhand eines Trennzeichens und gibt die einzelnen Teile als Array zurück. Sie ist die Standardlösung in PHP, wenn ein Text an einer bestimmten Stelle aufgeteilt werden soll, etwa bei CSV-Daten, URL-Parametern oder konfigurierbaren Listen.
Grundlegende Verwendung
explode() erwartet zwei Parameter: das Trennzeichen und den zu zerlegenden String.
<?php
$csv = 'Name;Vorname;Stadt';
$teile = explode(';', $csv);
print_r($teile);
/* Ausgabe:
Array (
[0] => Name
[1] => Vorname
[2] => Stadt
) */
?>
Das Trennzeichen selbst taucht nicht im Ergebnis auf. Es dient nur als Markierung, an welcher Stelle der String geteilt wird.
Anzahl der Teile begrenzen mit Limit
Der optionale dritte Parameter begrenzt die Anzahl der zurückgegebenen Elemente. Der letzte Eintrag enthält dann den gesamten Rest des Strings:
<?php
$log = '2024-03-15|ERROR|Datei nicht gefunden|Pfad: /tmp/test.txt';
$teile = explode('|', $log, 3);
echo $teile[0]; // 2024-03-15
echo $teile[1]; // ERROR
echo $teile[2]; // Datei nicht gefunden|Pfad: /tmp/test.txt
?>
Durch das Limit 3 werden nur die ersten zwei Trennzeichen ausgewertet. Alles nach dem zweiten Trennzeichen landet im dritten Element, inklusive weiterer Trennzeichen.
Praxisbeispiel: Tags aus einer Eingabe lesen
Ein typischer Anwendungsfall ist das Zerlegen von Benutzereingaben, zum Beispiel kommagetrennte Tags:
<?php
$eingabe = 'PHP, MySQL, HTML, CSS';
$tags = explode(',', $eingabe);
/* Leerzeichen an den Rändern entfernen */
$tags = array_map('trim', $tags);
print_r($tags);
/* Ausgabe:
Array (
[0] => PHP
[1] => MySQL
[2] => HTML
[3] => CSS
) */
?>
Der zusätzliche array_map('trim', ...) Aufruf entfernt Leerzeichen, die Benutzer nach dem Komma eingeben. Ohne diesen Schritt würde das Array Einträge wie ' MySQL' mit führendem Leerzeichen enthalten.
preg_split() für komplexe Trennmuster
Wenn der String nicht an einem festen Zeichen, sondern an einem Muster zerlegt werden soll, kommt preg_split() zum Einsatz. Diese Funktion akzeptiert reguläre Ausdrücke als Trennzeichen:
<?php
$text = 'Eins Zwei Drei Vier';
/* An einem oder mehreren Leerzeichen trennen */
$woerter = preg_split('/\s+/', $text);
print_r($woerter);
/* Ausgabe:
Array (
[0] => Eins
[1] => Zwei
[2] => Drei
[3] => Vier
) */
?>
Der Ausdruck /\s+/ trifft auf ein oder mehrere Leerzeichen, Tabs oder Zeilenumbrüche. So entstehen keine leeren Elemente im Array, auch wenn zwischen den Wörtern unterschiedlich viele Leerzeichen stehen.
Gegenstück: implode()
Die Funktion implode() macht das Gegenteil von explode(): Sie fügt die Elemente eines Arrays mit einem Verbindungszeichen zu einem String zusammen.
<?php
$teile = ['Berlin', 'Hamburg', 'München'];
echo implode(', ', $teile);
/* Ausgabe: Berlin, Hamburg, München */
?>
explode() und implode() bilden ein Paar und werden häufig zusammen verwendet, etwa wenn Daten für die Speicherung aufbereitet und später wieder eingelesen werden müssen.