str_split()
Unser Artikel behandelt die PHP-Funktion str_split(), mit der ein String in ein Array aufgeteilt wird. Syntax, Parameter und Beispiele werden erklärt.
Die PHP-Funktion str_split() zerlegt einen String in ein Array aus kleineren Teilen. Standardmäßig ist jeder Teil ein einzelnes Zeichen, aber es lassen sich auch Abschnitte fester Länge anfordern. Sie ist die bevorzugte Funktion, wenn man einen String zeichenweise durchlaufen oder in gleich große Blöcke aufteilen möchte.
Diese Seite behandelt die Syntax, den Parameter für die Abschnittslänge, den Rückgabewert sowie den Multibyte-Fallstrick, über den die meisten Entwickler stolpern.
Syntax
str_split(string $string, int $length = 1): arrayDie Funktion akzeptiert zwei Parameter:
$string— der aufzuteilende String. Pflichtangabe.$length— die Länge jedes Abschnitts in Bytes. Optional; Standardwert ist1. Muss1oder größer sein (ein Wert kleiner als1löst in PHP 8.0+ einenValueErroraus).
Sie gibt ein Array aus String-Abschnitten zurück. Ist $string leer, ist das Ergebnis ab PHP 8.2 ein leeres Array ([]). Der letzte Abschnitt kann kürzer als $length sein, wenn die Stringlänge kein genaues Vielfaches davon ist.
Aufteilen in einzelne Zeichen
Ohne zweites Argument gibt str_split() ein Array-Element pro Zeichen zurück. Das ist praktisch, um über jedes Zeichen zu iterieren oder Zeichen nach Kategorie zu zählen.
Die Ausgabe ist ein Array, in dem jedes Zeichen einen eigenen Index hat:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] => ,
[6] =>
[7] => W
[8] => o
[9] => r
[10] => l
[11] => d
[12] => !
)Aufteilen in Abschnitte fester Länge
Wird $length übergeben, werden die Zeichen in Abschnitte dieser Größe gruppiert. Das ist nützlich zum Formatieren von Strings, etwa zum Aufteilen einer Kartennummer in Gruppen oder zum Verarbeiten von Binärdaten in festen Blöcken.
<?php
$string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);
?>Der String hat 13 Zeichen, wird also in vier Abschnitte à 3 und einen abschließenden Abschnitt der Länge 1 aufgeteilt:
Array
(
[0] => Hel
[1] => lo,
[2] => Wo
[3] => rld
[4] => !
)Achtung bei Multibyte-Strings
str_split() arbeitet auf Bytes, nicht auf Zeichen. Bei ASCII-Text entspricht ein Byte einem Zeichen, sodass das Standardverhalten wie eine Zeichenaufteilung aussieht. UTF-8-Zeichen wie é oder Emoji belegen jedoch mehrere Bytes, und str_split() trennt sie auseinander und erzeugt ungültige Fragmente:
<?php
print_r(str_split("héllo"));
?>Array
(
[0] => h
[1] => Ã
[2] => ©
[3] => l
[4] => l
[5] => o
)Das é wurde als zwei fehlerhafte Bytes ausgegeben. Wenn ein UTF-8-String nach echten Zeichen aufgeteilt werden soll, ist stattdessen mb_str_split() zu verwenden — diese Funktion ist Multibyte-fähig und hält jedes Zeichen intakt.
Wann str_split() statt explode() verwenden?
str_split() ist die richtige Wahl, wenn ein String an einer festen Position oder Länge aufgeteilt werden soll — jedes einzelne Zeichen oder je N Bytes. explode() wird verwendet, wenn die Aufteilung an einem Trennzeichen wie einem Komma oder einem Leerzeichen erfolgen soll. Um ein Array wieder zu einem String zusammenzusetzen, siehe implode(), und um auf Basis eines regulären Ausdrucks aufzuteilen, siehe preg_split().