PHP 8.4.2 Released!

explode

(PHP 4, PHP 5, PHP 7, PHP 8)

explodeTeilt eine Zeichenkette anhand einer Zeichenkette

Beschreibung

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

Gibt ein Array aus Zeichenketten zurück, die jeweils Teil von string sind. Die Abtrennung erfolgt dabei an der mit separator angegebenen Zeichenkette.

Parameter-Liste

separator

Die Begrenzungszeichenkette.

string

Die Eingabezeichenkette.

limit

Ist der Parameter limit angegeben und positiv, enthält das zurückgegebene Array maximal limit Elemente, wobei das letzte Element den Rest von string beinhaltet.

Ist der Parameter limit negativ, werden alle Teilzeichenketten bis auf die letzten -limit-Teile zurückgegeben.

Wenn der Parameter limit gleich 0 ist, wird er wie 1 behandelt.

Hinweis:

Vor PHP 8.0 akzeptierte implode() die Parameter in beliebiger Reihenfolge. explode() hat dies nie unterstützt. Stellen Sie daher sicher, dass Sie den Parameter separator vor dem Parameter string notieren.

Rückgabewerte

Gibt ein Array von Strings zurück, die durch Aufsplitten des Parameters string an Begrenzungen durch separator erzeugt werden.

Ist separator eine leere Zeichenkette (""), so löst explode() einen ValueError aus. Enthält separator einen Wert, der nicht in string vorkommt und wird ein negativer Wert für limit verwendet, wird ein leeres Array zurückgegeben. Für alle anderen Werte von limit wird ein Array zurückgegeben, das string als einziges Element enthält. Wenn separator am Anfang oder am Ende von string steht, wird ein leeres Array an den Anfang bzw. das Ende des zurückgegebenen Arrays angehängt.

Changelog

Version Beschreibung
8.0.0 explode() löst nun einen ValueError aus, wenn an den Parameter separator eine leere Zeichenkette ("") übergeben wird. Bisher gab explode() stattdessen false zurück.

Beispiele

Beispiel #1 explode()-Beispiele

<?php
// Beispiel 1
$pizza = "Teil1 Teil2 Teil3 Teil4 Teil5 Teil6";
$teile = explode(" ", $pizza);
echo
$teile[0]; // Teil1
echo $teile[1]; // Teil2

// Beispiel 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo
$user; // foo
echo $pass; // *

?>

Beispiel #2 explode()-Rückgabebeispiele

<?php
/*
Eine Zeichenkette, die nicht das Trennzeichen enthält, wird einfach
ein ein-elementiges Array mit der ursprünglichen Zeichenkette liefern.
*/
$input1 = "hallo";
$input2 = "hallo,da";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

array(1)
(
    [0] => string(5) "hallo"
)
array(2)
(
    [0] => string(5) "hallo"
    [1] => string(5) "da"
)
array(2)
(
    [0] => string(0) ""
    [1] => string(0) ""
)

Beispiel #3 limit-Parameterbeispiele

<?php
$str
= 'eins|zwei|drei|vier';

// positiver Wert in "limit"
print_r(explode('|', $str, 2));

// negative Wert in "limit"
print_r(explode('|', $str, -1));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [0] => eins
    [1] => zwei|drei|vier
)
Array
(
    [0] => eins
    [1] => zwei
    [2] => drei
)

Anmerkungen

Hinweis: Diese Funktion ist binärsicher.

Siehe auch

  • preg_split() - Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks
  • str_split() - Konvertiert einen String in ein Array
  • mb_split() - Split multibyte string using regular expression
  • str_word_count() - Liefert Informationen über in einem String verwendete Worte
  • strtok() - Zerlegt einen String
  • implode() - Verbindet Array-Elemente zu einem String

add a note

User Contributed Notes 4 notes

up
28
Gerben
2 years ago
Note that an empty input string will still result in one element in the output array. This is something to remember when you are processing unknown input.

For example, maybe you are splitting part of a URI by forward slashes (like "articles/42/show" => ["articles", "42", "show"]). And maybe you expect that an empty URI will result in an empty array ("" => []). Instead, it will contain one element, with an empty string:

<?php

$uri
= '';
$parts = explode('/', $uri);
var_dump($parts);

?>

Will output:

array(1) {
[0]=>
string(0) ""
}

And not:

array(0) {
}
up
8
marc
1 year ago
If your data is smaller than the expected count with the list expansion:

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = explode(":", $data);
?>

The result is a warning not an error:

PHP Warning: Undefined array key 7 in ...

The solution is to pad the array to the expected length:

<?php
$data
= "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell,$nu) = array_pad( explode(":", $data), 8, "");
// where 8 is the count of the list arguments
?>
up
12
bocoroth
3 years ago
Be careful, while most non-alphanumeric data types as input strings return an array with an empty string when used with a valid separator, true returns an array with the string "1"!

var_dump(explode(',', null)); //array(1) { [0]=> string(0) "" }
var_dump(explode(',', false)); //array(1) { [0]=> string(0) "" }

var_dump(explode(',', true)); //array(1) { [0]=> string(1) "1" }
up
0
Alejandro-Ihuit
2 years ago
If you want to directly take a specific value without having to store it in another variable, you can implement the following:

$status = 'Missing-1';

echo $status_only = explode('-', $status)[0];

// Missing
To Top