explode()
Функция explode() разбивает строку на массив подстрок по заданному разделителю. Разбор синтаксиса, параметра $limit и примеров.
Функция explode() разбивает строку на массив подстрок, разделяя её в каждом месте, где встречается выбранный разделитель. Это стандартный способ в PHP превратить текст с разделителями — строку CSV, дату, список тегов через запятую — в данные, по которым можно итерироваться. Она является обратной к implode(), которая объединяет массив обратно в строку.
На этой странице рассматриваются синтаксис, необязательный параметр $limit (включая отрицательные значения), возвращаемое значение, типичные шаблоны разбора и подводные камни, на которых часто спотыкаются.
Синтаксис
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array| Параметр | Обязателен | Описание |
|---|---|---|
$separator | да | Строка-граница для разделения. Сопоставляется буквально, а не как регулярное выражение. |
$string | да | Входная строка для разбиения. |
$limit | нет | Управляет количеством возвращаемых частей (см. ниже). По умолчанию равен PHP_INT_MAX. |
Функция возвращает массив строк. Если $separator — пустая строка (""), explode() выбрасывает ValueError (в PHP 8+; в старых версиях возвращала false). Если разделитель не встречается в строке, результатом будет массив из одного элемента, содержащего всю исходную строку.
Простой пример
Мы задаём разделитель ,, вызываем explode() и выводим результирующий массив с помощью print_r(). Каждый элемент — это всё, что находится между двумя разделителями.
Вывод этого кода будет следующим:
Array
(
[0] => Hello
[1] => World!
)Ограничение количества частей
Необязательный параметр $limit изменяет способ разбиения строки:
- Положительный limit — массив содержит не более указанного числа элементов; последний элемент хранит неразбитый остаток строки.
- Ноль — обрабатывается как
1, то есть вся строка возвращается как один элемент. - Отрицательный limit — возвращаются все части, кроме последних
|limit|из них.
Положительный limit
При значении limit равном 3 строка разбивается не более чем на три элемента. Обратите внимание, что последний элемент сохраняет остаток строки в неразбитом виде — three,four,five — а не отбрасывает его.
Вывод этого кода будет следующим:
Array
(
[0] => one
[1] => two
[2] => three,four,five
)Это удобно, когда вас интересуют только первые несколько полей, например explode(' ', $logLine, 2) для отделения метки времени от остальной части сообщения лога.
Отрицательный limit
Отрицательный limit отбрасывает элементы с конца результата:
<?php
$string = "one,two,three,four,five";
print_r(explode(",", $string, -2));
?>Последние две части (four и five) удаляются:
Array
(
[0] => one
[1] => two
[2] => three
)Типичные шаблоны разбора
Распространённый реальный пример — чтение записи с разделителями и обрезка пробелов в каждом поле:
<?php
$csvRow = "Jane , Doe , [email protected] ";
$fields = array_map('trim', explode(",", $csvRow));
print_r($fields);
?>Вывод содержит чистые значения без пробелов:
Array
(
[0] => Jane
[1] => Doe
[2] => [email protected]
)explode() также хорошо сочетается с деструктуризацией list() для извлечения именованных частей из строки:
<?php
$date = "2026-06-21";
[$year, $month, $day] = explode("-", $date);
echo "Year: $year, Month: $month, Day: $day";
?>Вывод:
Year: 2026, Month: 06, Day: 21Подводные камни
- Разделитель является буквальным, а не регулярным выражением.
explode("-", ...)разбивает по дефису, а не по шаблону. Если нужно регулярное выражение (например, разбиение по любому количеству пробельных символов), используйтеpreg_split(). - С помощью
explode()нельзя разбить строку на отдельные символы. Пустой разделитель вызываетValueError. Чтобы разбить строку на отдельные символы, используйтеstr_split(). - Несколько соседних разделителей создают пустые элементы.
explode(",", "a,,b")возвращает["a", "", "b"]. Отфильтруйте их с помощьюarray_filter(), если они не нужны. - Разделитель не найден? Вы всё равно получите корректный массив — из одного элемента, содержащего всю строку, — поэтому обращение по индексу
[0]всегда безопасно.
Связанные функции
implode()/join()— обратная операция: объединить массив в строку.str_split()— разбить строку на части фиксированной длины (или на символы).preg_split()— разбить строку с помощью регулярного выражения.substr()— извлечь часть строки по позиции.trim()— убрать пробельные символы из каждой части после разбиения.