Как разбить строку на массив PHP с помощью explode
Чтобы разбить строку на массив PHP, передайте разделитель и исходную строку в explode(). Функция вернет части в исходном порядке. В статье вы найдете рабочий код для телефонов, списков и предложений, разберете параметр limit и выберете замену для CSV или нескольких разделителей.
- Как в PHP разбить строку на массив по разделителю
- Синтаксис explode и параметры
- Как в PHP разделить строку по разделителю
- Параметр limit: положительный, отрицательный и ноль
- Граничные случаи explode
- Как очистить и разобрать результат
- Когда explode не подходит
- Обратная операция: implode
- Ошибки при разбиении строки в PHP
Как в PHP разбить строку на массив по разделителю
Вызов explode() делит строку по одному фиксированному разделителю. Например, код разделит номер телефона на три строки.
<?php
$phone = '001-234-567678';
$parts = explode('-', $phone);
print_r($parts);Array
(
[0] => 001
[1] => 234
[2] => 567678
)Первым аргументом explode() передайте разделитель, вторым – строку. Каждый элемент результата сохраняет тип строки, поэтому '001' не потеряет начальный ноль.
Синтаксис explode и параметры
Функция принимает разделитель, исходную строку и необязательный лимит. Сигнатура выглядит так:
explode(string $separator, string $string, int $limit = PHP_INT_MAX): arrayПолное описание параметров есть в официальной документации PHP по explode(). Функция explode() возвращает массив строк. Переберите его через foreach или обратитесь к элементу по индексу.
$separator– строка-разделитель: дефис, пробел, запятая или несколько символов.$string– строка, которую нужно разделить.$limit– число частей или правило отсечения элементов.
Значение limit | Результат |
|---|---|
| Не задано | Все части строки |
| Положительное число | Не больше указанного числа частей, последняя часть содержит остаток |
| 0 | Одноэлементный массив с исходной строкой |
| Отрицательное число | Все части без последних |limit| элементов |
Положительный лимит ограничивает количество элементов. Отрицательный лимит убирает части с конца, а значение 0 обрабатывается как 1.
Как в PHP разделить строку по разделителю
Передайте точный разделитель первым аргументом explode(). Пробел, запятая и запятая с пробелом дадут разные массивы.
<?php
$phone = '001-234-567678';
$parts = explode('-', $phone);
foreach ($parts as $part) {
echo $part . PHP_EOL;
}001
234
567678Один пробел подходит для предложения с одиночными пробелами между словами.
<?php
$sentence = 'PHP splits a sentence into words';
$words = explode(' ', $sentence);
print_r($words);Array
(
[0] => PHP
[1] => splits
[2] => a
[3] => sentence
[4] => into
[5] => words
)Для списка с единым форматом «, » можно сразу убрать запятую и следующий пробел.
<?php
$tags = 'php, backend, arrays';
$items = explode(', ', $tags);
print_r($items);Array
(
[0] => php
[1] => backend
[2] => arrays
)Если пробел после запятой бывает не всегда, разделите по запятой и обработайте пробелы через trim().
Параметр limit: положительный, отрицательный и ноль
Параметр limit меняет число элементов и содержимое последней части. Каждый вариант удобно проверить отдельным коротким примером.
Положительный limit
Значение 2 дает максимум две части. Вторая часть получает весь оставшийся текст.
<?php
$text = 'one two three four';
$result = explode(' ', $text, 2);
print_r($result);Array
(
[0] => one
[1] => two three four
)Отрицательный limit
Значение -2 убирает два последних элемента результата.
<?php
$text = 'one two three four';
$result = explode(' ', $text, -2);
print_r($result);Array
(
[0] => one
[1] => two
)Нулевой limit
Нулевой лимит работает как единица и возвращает исходную строку одним элементом.
<?php
$text = 'one two three';
$result = explode(' ', $text, 0);
print_r($result);Array
(
[0] => one two three
)Граничные случаи explode
Граничные значения меняют состав массива. Учитывайте их при обработке данных из формы, файла или API.
Если разделитель отсутствует, положительный лимит возвращает исходную строку одним элементом. При отрицательном лимите результатом становится пустой массив.
<?php
$positive = explode('-', 'abc', 2);
$negative = explode('-', 'abc', -1);
print_r($positive);
print_r($negative);Array
(
[0] => abc
)
Array
(
)Пустая строка без лимита дает один пустой элемент. Разделитель в начале или конце строки добавляет пустой элемент с соответствующей стороны. Два разделителя подряд оставляют пустую строку между частями.
<?php
$empty = explode(',', '');
$edges = explode(',', ',a,b,');
$double = explode(',', 'a,,b');
var_dump($empty, $edges, $double);array(1) {
[0]=>
string(0) ""
}
array(4) {
[0]=>
string(0) ""
[1]=>
string(1) "a"
[2]=>
string(1) "b"
[3]=>
string(0) ""
}
array(3) {
[0]=>
string(1) "a"
[1]=>
string(0) ""
[2]=>
string(1) "b"
}Пустой разделитель вызывает ValueError в PHP 8.0 и более новых версиях. В более ранних версиях PHP такой вызов возвращал false. Для кусков фиксированной длины используйте str_split() или mb_str_split().
Как очистить и разобрать результат
После разделения элементы могут содержать пробелы и пустые строки. Сначала уберите пробелы у каждого элемента, затем удалите пустые значения.
<?php
$input = ' php, , mysql, javascript ';
$parts = explode(',', $input);
$parts = array_map('trim', $parts);
$parts = array_values(array_filter($parts, 'strlen'));
print_r($parts);
echo count($parts);Array
(
[0] => php
[1] => mysql
[2] => javascript
)
3array_map('trim', ...) очищает пробелы у каждого элемента. Вызов array_filter($parts, 'strlen') удаляет строки нулевой длины и сохраняет строку '0'. array_values() возвращает последовательные индексы.
Разложите первые значения по переменным через list() или короткий синтаксис массивов.
<?php
$coordinates = explode(':', '55.75:37.61');
[$latitude, $longitude] = $coordinates;
var_dump($latitude, $longitude);
echo count($coordinates);string(5) "55.75"
string(5) "37.61"
2Запись list($latitude, $longitude) = $coordinates; дает тот же результат. Перед распаковкой пользовательских данных посчитайте части через count() и обработайте слишком короткий массив.
Когда explode не подходит
explode() принимает один фиксированный разделитель. Выберите другую функцию, если строка содержит несколько разделителей, CSV-кавычки или куски заданной длины.
| Задача | Функция | Что она учитывает |
|---|---|---|
| Несколько разделителей | preg_split() | Регулярное выражение |
| CSV с кавычками | str_getcsv() | Кавычки, разделитель и экранирование полей |
| Куски фиксированной длины в байтах | str_split() | Размер части в байтах |
| Куски фиксированной длины в символах | mb_str_split() | Многобайтовую кодировку |
Для нескольких разделителей передайте регулярное выражение в preg_split(). Параметр -1 оставляет все части, а флаг PREG_SPLIT_NO_EMPTY убирает пустые элементы.
<?php
$text = 'php, mysql; javascript';
$parts = preg_split('/[,;]\s*/', $text, -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);Array
(
[0] => php
[1] => mysql
[2] => javascript
)Для CSV с запятой внутри поля используйте str_getcsv(). Второй аргумент задает разделитель, третий – символ обрамления, четвертый – символ экранирования.
<?php
$line = '"Smith, John",42,"New York"';
$fields = str_getcsv($line, ',', '"', '');
print_r($fields);Array
(
[0] => Smith, John
[1] => 42
[2] => New York
)Функция str_split() делит ASCII-строку на куски заданной длины.
<?php
$word = 'abcdef';
$chunks = str_split($word, 2);
print_r($chunks);Array
(
[0] => ab
[1] => cd
[2] => ef
)Для многобайтового текста возьмите mb_str_split() и укажите кодировку UTF-8.
<?php
$text = '日本語文字列';
$chunks = mb_str_split($text, 2, 'UTF-8');
print_r($chunks);Array
(
[0] => 日本
[1] => 語文
[2] => 字列
)Обратная операция: implode
Функция implode() собирает элементы массива обратно в строку. Ее параметры и примеры описаны на странице implode() в документации PHP.
<?php
$parts = ['001', '234', '567678'];
$phone = implode('-', $parts);
echo $phone;001-234-567678Связка explode() и implode() помогает изменить отдельный элемент и собрать строку с тем же разделителем.
Ошибки при разбиении строки в PHP
Двойные пробелы, две запятые и разделитель по краю создают пустые элементы. Очистите части через array_map('trim', $parts), затем примените array_filter($parts, 'strlen'). Такой фильтр сохраняет строку '0'.
Не применяйте explode() к CSV с запятыми внутри кавычек. Функция увидит каждую запятую и разделит одно поле на несколько частей. Возьмите str_getcsv().
Соблюдайте порядок аргументов: сначала идет разделитель, затем исходная строка. Вызов explode($string, $separator) ищет значение первой переменной внутри второй.
<?php
$string = 'a,b,c';
$separator = ',';
$result = explode($string, $separator);
print_r($result);Array
(
[0] => ,
)Функции split() в современном PHP нет. Не считайте explode() ее прямой заменой: split() принимала регулярное выражение, а explode() ищет буквальный разделитель.
Многобайтовый разделитель передавайте целой последовательностью символов. Для разбиения UTF-8-строки на отдельные символы выбирайте mb_str_split(), потому что str_split() работает с байтами.
Совет от нашей редакции: сначала определите формат входной строки, затем выберите одну функцию под один разделитель, регулярное выражение, CSV или фиксированный размер частей.
Популярное за неделю
- Как создать сайт самому в 2026: 4 способа + пошаговая инструкция 34 мин чтения
- Лучшие конструкторы для создания сайтов — плюсы, минусы и сравнения 22 мин чтения
- Как сделать редирект на PHP 6 мин чтения
- Основы ООП в PHP: принципы и примеры 6 мин чтения
- Адаптивный помесячный календарь на AJAX и PHP 2 мин чтения
- Как создать формы регистрации и авторизации на PHP 5 мин чтения
Комментарии