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] => вишня
)Ограничение количества элементов:
$str = 'один два три четыре';
$arr = explode(' ', $str, 3);
print_r($arr);Array
(
[0] => один
[1] => два
[2] => три четыре
)Удаление последних элементов:
$str = 'один два три четыре';
$arr = explode(' ', $str, -2);
print_r($arr);Array
(
[0] => один
[1] => два
)$str = 'один два три';
$arr = explode(' ', $str, 0);
print_r($arr);Array
(
[0] => один два три
)Похожие функции в PHP
Разбивает строку на массив символов или фрагментов фиксированной длины. Используется для работы с отдельными символами, а не с разделителями.
Выполняет разбиение строки по регулярному выражению. Применяется для сложных условий разделения, когда разделитель имеет переменный формат.
Обратная операция - объединяет элементы массива в строку через указанный разделитель.
Специализированная функция для лексического анализа 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Для строк в кодировке UTF-8 с многобайтовыми символами лучше использовать mb_split:
// Потенциальная проблема с кириллицей
$str = 'пять|шесть|семь';
$arr = explode('|', $str); // Работает корректно
// Проблема может возникнуть только если разделитель - многобайтовый символИзменения в новых версиях PHP
Функция explode() теперь выбрасывает TypeError при передаче аргументов некорректного типа, вместо генерации предупреждения.
В исторических версиях при передаче пустого разделителя поведение могло отличаться. В текущих версиях строго возвращается false.
В PHP 5 и ранних версиях 7 explode() могла принимать нестроковые аргументы с неявным приведением типов, что иногда приводило к неочевидному поведению.
Расширенные примеры
$csv = 'Иванов,Петров,"Сидоров, Алексей"';
// Простой explode не обрабатывает кавычки корректно
$arr = explode(',', $csv);
print_r($arr);Array
(
[0] => Иванов
[1] => Петров
[2] => "Сидоров
[3] => Алексей"
)Для корректной обработки CSV следует использовать str_getcsv().
$filename = 'document.backup.pdf';
$parts = explode('.', $filename);
$extension = end($parts);
echo $extension;pdf$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
)$str = 'яблоко, груша; вишня | апельсин';
// Заменяем все разделители на один тип перед explode
$str = str_replace([';', '|', ','], ',', $str);
$arr = explode(',', $str);
print_r($arr);Array
(
[0] => яблоко
[1] => груша
[2] => вишня
[3] => апельсин
)$text = "Первая строка\nВторая строка\n\nЧетвертая строка";
$lines = explode("\n", $text);
// Удаление пустых строк
$lines = array_filter($lines, function($line) {
return trim($line) !== '';
});
print_r($lines);Array
(
[0] => Первая строка
[1] => Вторая строка
[3] => Четвертая строка
)$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
)$string = "This is\tan example\nstring";
// Разделение по разным пробельным символам
$tokens = explode(' ', $string);
// Более корректно использовать preg_split('/\s+/', $string)Аналоги в других языках
text = 'яблоко,груша,вишня'
result = text.split(',')
print(result)['яблоко', 'груша', 'вишня']Python также поддерживает параметр maxsplit (аналог limit). Отличие: в Python split() без аргументов делит по пробельным символам.
let text = 'яблоко,груша,вишня';
let result = text.split(',');
console.log(result);['яблоко', 'груша', 'вишня']Метод поддерживает limit, но не имеет аналога отрицательного limit из PHP.
Не является прямым аналогом, но может извлекать части строки по разделителю:
SELECT SUBSTRING_INDEX('www.example.com', '.', 2);www.exampleАналогичен JavaScript, принимает регулярное выражение в качестве разделителя.