1

Explode: примеры (PHP)

Разделение строк функцией explode в PHP с примерами
Раздел: Работа со строками
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

Функция explode в PHP

Назначение и основные сведения

Функция explode() разбивает строку на подстроки по указанному разделителю и возвращает их в виде массива. Это один из основных инструментов для работы со строковыми данными, когда требуется разделить содержимое на части.

Когда используется

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

Аргументы функции

separator (string): Разделитель, по которому происходит разбиение строки. Если разделитель - пустая строка (''), функция вернет false.

string (string): Исходная строка для обработки.

limit (int, необязательный): Ограничивает количество элементов в возвращаемом массиве.

  • Если limit положительный - массив будет содержать не более limit элементов, при этом последний элемент содержит остаток строки.
  • Если limit отрицательный - возвращаются все элементы кроме последних -limit штук.
  • Если limit равен 0 - трактуется как 1.
  • Если limit не указан - функция возвращает все возможные фрагменты.

Простые примеры использования

Базовый пример

Разделение строки по запятой:

$str = 'яблоко,груша,вишня';
$arr = explode(',', $str);
print_r($arr);
Array
(
[0] => яблоко
[1] => груша
[2] => вишня
)
С положительным limit

Ограничение количества элементов:

$str = 'один два три четыре';
$arr = explode(' ', $str, 3);
print_r($arr);
Array
(
[0] => один
[1] => два
[2] => три четыре
)
С отрицательным limit

Удаление последних элементов:

$str = 'один два три четыре';
$arr = explode(' ', $str, -2);
print_r($arr);
Array
(
[0] => один
[1] => два
)
С limit = 0
$str = 'один два три';
$arr = explode(' ', $str, 0);
print_r($arr);
Array
(
[0] => один два три
)

Похожие функции в PHP

Разбивает строку на массив символов или фрагментов фиксированной длины. Используется для работы с отдельными символами, а не с разделителями.

preg_split()

Выполняет разбиение строки по регулярному выражению. Применяется для сложных условий разделения, когда разделитель имеет переменный формат.

Обратная операция - объединяет элементы массива в строку через указанный разделитель.

token_get_all()

Специализированная функция для лексического анализа PHP-кода.

explode() предпочтительнее для простых случаев с фиксированным разделителем. Для сложных условий разделения стоит использовать preg_split().

Типичные ошибки

Пустой разделитель
$result = explode('', 'текст');
var_dump($result);
bool(false)

Пустая строка-разделитель вызывает возврат false.

Разделитель отсутствует в строке
$arr = explode(',', 'строка без разделителя');
print_r($arr);
Array
(
[0] => строка без разделителя
)

Функция возвращает массив с одним элементом - исходной строкой.

Некорректный тип аргументов
$arr = explode(',', null);
var_dump($arr);
PHP Warning: explode() expects parameter 2 to be string, null given
Использование с multibyte строками

Для строк в кодировке UTF-8 с многобайтовыми символами лучше использовать mb_split:

// Потенциальная проблема с кириллицей
$str = 'пять|шесть|семь';
$arr = explode('|', $str); // Работает корректно
// Проблема может возникнуть только если разделитель - многобайтовый символ

Изменения в новых версиях PHP

PHP 8.0

Функция explode() теперь выбрасывает TypeError при передаче аргументов некорректного типа, вместо генерации предупреждения.

PHP 7.0 и более ранние

В исторических версиях при передаче пустого разделителя поведение могло отличаться. В текущих версиях строго возвращается false.

Сравнение с прошлыми версиями

В PHP 5 и ранних версиях 7 explode() могла принимать нестроковые аргументы с неявным приведением типов, что иногда приводило к неочевидному поведению.

Расширенные примеры

Разбор CSV строки с кавычками
Пример php
$csv = 'Иванов,Петров,"Сидоров, Алексей"';
// Простой explode не обрабатывает кавычки корректно
$arr = explode(',', $csv);
print_r($arr);
Array
(
[0] => Иванов
[1] => Петров
[2] => "Сидоров
[3] => Алексей"
)

Для корректной обработки CSV следует использовать str_getcsv().

Извлечение расширения файла
Пример php
$filename = 'document.backup.pdf';
$parts = explode('.', $filename);
$extension = end($parts);
echo $extension;
pdf
Ограниченный разбор URL
Пример php
$url = 'https://example.com/path/to/page';
$parts = explode('/', $url, 4);
print_r($parts);
Array
(
[0] => https:
[1] =>
[2] => example.com
[3] => path/to/page
)
Разделение по нескольким символам
Пример php
$str = 'яблоко, груша; вишня | апельсин';
// Заменяем все разделители на один тип перед explode
$str = str_replace([';', '|', ','], ',', $str);
$arr = explode(',', $str);
print_r($arr);
Array
(
[0] => яблоко
[1] => груша
[2] => вишня
[3] => апельсин
)
Обработка многострочного текста
Пример php
$text = "Первая строка\nВторая строка\n\nЧетвертая строка";
$lines = explode("\n", $text);
// Удаление пустых строк
$lines = array_filter($lines, function($line) {
return trim($line) !== '';
});
print_r($lines);
Array
(
[0] => Первая строка
[1] => Вторая строка
[3] => Четвертая строка
)
Разбор конфигурационных строк
Пример php
$config = 'host=localhost;dbname=test;charset=utf8';
$pairs = explode(';', $config);
$result = [];
foreach ($pairs as $pair) {
$item = explode('=', $pair, 2);
if (count($item) === 2) {
$result[$item[0]] = $item[1];
}
}
print_r($result);
Array
(
[host] => localhost
[dbname] => test
[charset] => utf8
)
Эмуляция strtok()
Пример php
$string = "This is\tan example\nstring";
// Разделение по разным пробельным символам
$tokens = explode(' ', $string);
// Более корректно использовать preg_split('/\s+/', $string)

Аналоги в других языках

Python: split()
text = 'яблоко,груша,вишня'
result = text.split(',')
print(result)
['яблоко', 'груша', 'вишня']

Python также поддерживает параметр maxsplit (аналог limit). Отличие: в Python split() без аргументов делит по пробельным символам.

JavaScript: split()
let text = 'яблоко,груша,вишня';
let result = text.split(',');
console.log(result);
['яблоко', 'груша', 'вишня']

Метод поддерживает limit, но не имеет аналога отрицательного limit из PHP.

MySQL: SUBSTRING_INDEX()

Не является прямым аналогом, но может извлекать части строки по разделителю:

SELECT SUBSTRING_INDEX('www.example.com', '.', 2);
www.example
Java: String.split()

Аналогичен JavaScript, принимает регулярное выражение в качестве разделителя.

PHP explode function comments

En
Explode Split a string by a string