PHP Conference Japan 2024

explode

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

explodeРазбивает строку разделителем

Описание

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

Функция возвращает массив строк, каждая из которых — подстрока, которая образовалась за счёт разделения строки 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]; // кусок1
echo $pieces[1]; // кусок2

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

?>

Пример #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] => три
)

Примечания

Замечание: Функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • preg_split() - Разбивает строку по регулярному выражению
  • str_split() - Преобразовывает строку в массив
  • mb_split() - Разделяет строки в многобайтных кодировках через регулярное выражение
  • str_word_count() - Возвращает информацию о словах, которые входят в строку
  • strtok() - Разбивает строку на токены
  • implode() - Объединяет элементы массива в строку

Добавить

Примечания пользователей 4 notes

up
29
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
9
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
11
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