(PHP 4, PHP 5, PHP 7, PHP 8)
explode — Разбивает строку разделителем
Функция возвращает массив строк, каждая из которых — подстрока,
которая образовалась за счёт разделения строки string
по границам, которые образовала строка-разделитель separator.
separatorРазделитель.
stringВходная строка.
limit
Функция вернёт массив, который будет содержать максимум limit элементов,
при этом последний элемент будет содержать остаток строки string.
Функция вернёт все компоненты за вычетом
заданного в параметре limit количества элементов с конца,
если параметр limit отрицательный.
Функция расценит значение limit как 1, если параметр равен нулю.
Замечание:
До PHP 8.0 функция implode() принимала параметры в любом порядке. Функция explode() никогда этого не поддерживала: убедитесь, что разделитель
separatorидёт перед строкойstring.
Функция возвращает массив (array ) строк (string ),
который она создаёт разделением строки string
по границам, которые образовал разделитель separator.
Функция explode() выбрасывает исключение ValueError ,
если разделитель separator — пустая строка "".
Функция возвращает пустой массив (array ), если разделителя separator
нет в строке string
и задали отрицательное значение параметра limit,
иначе возвращает массив, который содержит строку string.
Функция добавит значения как пустые значения массива (array )
в первой или в последней позиции массива (array ), который она возвращает,
если значения разделителя separator появляются
в начале или в конце строки string, соответственно.
| Версия | Описание |
|---|---|
| 8.0.0 |
Теперь функция explode() выбрасывает исключение TypeError ,
если разделитель separator — пустая строка "".
Раньше функция explode() вместо исключения возвращала false .
|
Пример #1 Пример использования функции explode()
<?php
// Пример 1
$pizza = "кусок1 кусок2 кусок3 кусок4 кусок5 кусок6";
$pieces = explode(" ", $pizza);
echo $pieces[0], PHP_EOL; // кусок1
echo $pieces[1], PHP_EOL; // кусок2
// Пример 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user, PHP_EOL; // foo
echo $pass, PHP_EOL; // *
?>
Пример #2 Пример значения, которое возвращает функция explode()
<?php
/**
* Строка, которая не содержит разделителя, будет
* просто возвращать массив с одним значением оригинальной строки.
*/
$input1 = "hello";
$input2 = "hello,there";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );
?>Результат выполнения приведённого примера:
array(1) ( [0] => string(5) "hello" ) array(2) ( [0] => string(5) "hello" [1] => string(5) "there" ) array(2) ( [0] => string(0) "" [1] => string(0) "" )
Пример #3 Примеры работы функции с параметром limit
<?php
$str = 'один|два|три|четыре';
// положительный лимит
print_r(explode('|', $str, 2));
// отрицательный лимит
print_r(explode('|', $str, -1));
?>Результат выполнения приведённого примера:
Array ( [0] => один [1] => два|три|четыре ) Array ( [0] => один [1] => два [2] => три )
Замечание: Функция безопасна для обработки данных в двоичной форме.
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) {
}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
?>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" }