
Функции explode(), str_split() и preg_split() позволяют превратить строку в массив в PHP, но применяются они в разных контекстах. Например, explode(‘,’, ‘a,b,c’) вернёт массив [‘a’, ‘b’, ‘c’], разбивая строку по запятой. Это основной способ для разбора строк с разделителями.
Если нужно разбить строку посимвольно, используют str_split(). Вызов str_split(‘abc’) создаёт массив [‘a’, ‘b’, ‘c’]. Второй параметр функции задаёт длину фрагментов: str_split(‘abcdef’, 2) вернёт [‘ab’, ‘cd’, ‘ef’].
Для более гибкой работы с разделителями подойдёт preg_split(). Эта функция использует регулярные выражения. Пример: preg_split(‘/\s+/’, ‘один два три’) вернёт [‘один’, ‘два’, ‘три’], игнорируя количество пробелов между словами.
Рекомендуется учитывать тип и структуру исходной строки. Для CSV-формата – explode() с указанием точного разделителя. Для строк без фиксированного формата – preg_split(). При работе с байтовыми строками важно учитывать кодировку: str_split() не подходит для UTF-8, в таких случаях используется mb_str_split() (начиная с PHP 7.4).
Перед преобразованием строки имеет смысл применять trim() для удаления лишних пробелов и filter_var() для валидации, если от строки ожидаются определённые значения.
Как использовать функцию explode для разделения строки по разделителю

Функция explode разбивает строку на элементы массива, используя указанный разделитель. Сигнатура: explode(string $separator, string $string, int $limit = PHP_INT_MAX): array.
Пример: explode(',', 'яблоко,банан,груша') вернёт ['яблоко', 'банан', 'груша'].
Если строка не содержит разделителя, результат – массив с одним элементом: исходной строкой. Например, explode(',', 'груша') вернёт ['груша'].
Третий параметр $limit управляет количеством возвращаемых элементов. Значение больше нуля ограничивает количество частей, оставляя остаток последним элементом: explode(',', 'а,б,в,г', 3) → ['а', 'б', 'в,г'].
Значение $limit меньше нуля удаляет указанное количество элементов с конца: explode(',', 'а,б,в,г', -1) → ['а', 'б', 'в'].
Если $separator – пустая строка, explode выдаст ошибку. Для посимвольного разделения используйте str_split.
Функция чувствительна к регистру и не обрезает пробелы. Для удаления лишних пробелов используйте array_map('trim', ...) после explode.
Чем отличается explode от preg_split при разбиении строки
explode() и preg_split() работают по разному принципу: первый использует простой разделитель, второй – регулярное выражение. Это ключевое отличие влияет на возможности и производительность.
- explode() подходит только для фиксированных строковых разделителей. Пример:
explode(",", "a,b,c")даст["a", "b", "c"]. - preg_split() разбивает строку по шаблону. Пример:
preg_split("/[\s,;]+/", "a, b; c")вернёт["a", "b", "c"].
При необходимости игнорировать множественные пробелы, символы-разделители разного типа или использовать классы символов – preg_split() незаменим.
explode()быстрее, так как не задействует парсер регулярных выражений. Подходит для предсказуемых данных.preg_split()универсальнее, особенно если нужно учитывать шаблон или использовать флаги (например,PREG_SPLIT_NO_EMPTYдля исключения пустых элементов).
Если известен чёткий символ-разделитель и не требуется дополнительная логика – использовать explode(). В остальных случаях – preg_split().
Как обработать пробелы и пустые элементы при разбиении строки

При разбиении строки в PHP с помощью explode() или preg_split() могут возникать лишние пробелы и пустые элементы. Это особенно актуально, если строка содержит несколько подряд идущих разделителей или пробелы вокруг них.
Для удаления пустых элементов после explode() можно использовать array_filter() без второго аргумента или с флагом ARRAY_FILTER_USE_BOTH, если требуется сохранить только непустые значения:
$str = "яблоко,,груша, ,банан";
$arr = array_filter(explode(",", $str), 'strlen');
Функция strlen отфильтрует элементы с нулевой длиной, включая строки, содержащие только пробел.
Если нужно удалить пробелы в начале и в конце каждого элемента, применяют array_map(‘trim’, …):
$str = "яблоко, груша, , банан ";
$arr = array_filter(array_map('trim', explode(",", $str)), 'strlen');
Это позволяет получить массив без пустых и пробельных значений.
Альтернативный способ – использовать preg_split() с флагом PREG_SPLIT_NO_EMPTY и регулярным выражением, учитывающим пробелы:
$str = " яблоко , груша , , банан ";
$arr = preg_split('/\s*,\s*/', $str, -1, PREG_SPLIT_NO_EMPTY);
Здесь \s* удаляет пробелы вокруг запятой, а PREG_SPLIT_NO_EMPTY исключает пустые элементы.
При необходимости сохранить исходные значения, но избавиться от крайних пробелов, используют array_map(‘trim’, …) без фильтрации.
Не следует применять str_replace для удаления пробелов до разбиения – это приведёт к потере значимых символов внутри слов.
Преобразование строки с числами в массив чисел

Для получения массива чисел из строки вида "10,20,30,40" используется функция explode() для разделения строки и array_map() или array_walk() для приведения значений к числовому типу.
Пример:
$str = "10,20,30,40";
$array = array_map('intval', explode(',', $str));
Если числа разделены пробелами, используйте preg_split() с регулярным выражением:
$str = "10 20 30 40";
$array = array_map('intval', preg_split('/\s+/', $str));
Для строк с неочевидными разделителями (например, точка с запятой или вертикальная черта) указывайте нужный символ явно:
$str = "10|20|30|40";
$array = array_map('floatval', explode('|', $str));
Если в строке возможны лишние пробелы, используйте trim() совместно с array_map():
$str = " 10 , 20 , 30 , 40 ";
$array = array_map('intval', array_map('trim', explode(',', $str)));
Для фильтрации некорректных значений применяйте array_filter() до или после приведения типа:
$str = "10, ,abc,20,30";
$raw = explode(',', $str);
$filtered = array_filter($raw, fn($v) => is_numeric(trim($v)));
$array = array_map('intval', $filtered);
Преобразование строки JSON в массив с помощью json_decode
Функция json_decode() используется для разбора JSON-строки и преобразования её в массив или объект. Чтобы получить массив, необходимо передать true вторым аргументом:
$json = '{"name":"Иван","age":30,"city":"Москва"}';
$data = json_decode($json, true);
Результат – ассоциативный массив:
Array
(
[name] => Иван
[age] => 30
[city] => Москва
)
Если не указать второй аргумент, json_decode() вернёт объект stdClass. Для работы с массивами это может вызвать ошибки при обращении к элементам:
$data['name']; // Warning: Cannot use object as array
Функция возвращает null при ошибке разбора. Проверка:
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'Ошибка: ' . json_last_error_msg();
}
JSON-строка должна быть корректной: двойные кавычки, экранирование, отсутствие лишних запятых. Пример некорректной строки:
$badJson = '{name:"Иван", age:30}'; // Ошибка из-за отсутствия кавычек
Для кодировки массива в JSON используется json_encode(), обратная функция:
$array = ['name' => 'Иван', 'age' => 30];
$json = json_encode($array);
Проверка пригодности данных перед декодированием – обязательна при получении JSON из внешних источников. Всегда используйте json_last_error() или try-catch с флагом JSON_THROW_ON_ERROR для повышения надёжности:
try {
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo 'Ошибка JSON: ' . $e->getMessage();
}
Как разделить многомерную строку на вложенные массивы
Чтобы преобразовать строку с разделителями в многомерный массив, можно воспользоваться функциями explode() и array_map() в PHP. Рассмотрим несколько подходов.
Предположим, у нас есть строка с вложенными элементами, разделённая, например, запятыми, точками с запятой или пробелами. В зависимости от того, какой уровень вложенности требуется, мы можем разделить строку на массивы.
Простой случай: двухуровневая вложенность

Если нужно разделить строку на два уровня массивов, используем функцию explode() дважды. Допустим, у нас есть строка:
$str = "a,b,c;d,e,f;g,h,i";
Для разделения на два массива (первый уровень – по точке с запятой, второй – по запятой) пишем:
$first_level = explode(';', $str);
$nested_arrays = array_map(function($item) {
return explode(',', $item);
}, $first_level);
Теперь $nested_arrays будет содержать массивы с элементами, разделёнными по запятой:
[
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i']
]
Многократное использование explode() для глубоких вложений
Если структура строки более сложная, например, три или более уровней вложенности, можно комбинировать explode() и array_map() несколько раз:
$str = "a,b,c|d,e,f|g,h,i|j,k,l";
$first_level = explode('|', $str);
$nested_arrays = array_map(function($item) {
return explode(',', $item);
}, $first_level);
Результат будет таким:
[
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l']
]
Применение регулярных выражений для более гибкого разделения
Если разделители варьируются, можно использовать регулярные выражения для более точного контроля. Функция preg_split() позволяет использовать сложные шаблоны:
$str = "a,b,c d|e,f,g h|i,j,k l";
$nested_arrays = preg_split('/[\s,|]+/', $str);
Этот код разделит строку по пробелам, запятой и вертикальной черте.
Рекомендации
- Используйте
array_map(), если вам нужно обработать элементы после разбиения. - Для глубоких вложений лучше комбинировать несколько
explode(). - Когда структура строки сложно предсказуема, применяйте
preg_split()с регулярными выражениями.
В этих случаях важно правильно понимать структуру строки и тип разделителей, чтобы выбрать наиболее подходящий метод разделения.
Обработка строки с неизвестным количеством разделителей
Когда нужно разделить строку с переменным числом разделителей, стандартная функция explode() не всегда подойдет. Вместо этого можно использовать регулярные выражения с функцией preg_split(), которая позволяет гибко настроить разделение по любым символам.
Если разделители могут быть различными (например, пробел, запятая, точка с запятой), регулярные выражения станут наилучшим выбором. Например, чтобы разделить строку по пробелам, запятым и точкам с запятой, можно использовать следующий код:
$str = "яблоко, апельсин; банан, груша";
$array = preg_split("/[ ,;]+/", $str);
Здесь [ ,;]+ означает любой пробел, запятую или точку с запятой, причем их может быть несколько подряд. Символ + в регулярном выражении указывает, что разделители могут повторяться.
Если требуется игнорировать пустые строки после разделения, можно использовать параметр PREG_SPLIT_NO_EMPTY, который исключит их из итогового массива:
$array = preg_split("/[ ,;]+/", $str, -1, PREG_SPLIT_NO_EMPTY);
Кроме того, если разделитель может быть не только знаком препинания или пробелом, но и специальными символами, можно использовать экранирование в регулярных выражениях, чтобы избежать конфликтов.
При использовании preg_split() важно учитывать производительность, особенно если строка большая или регулярное выражение сложное. В таких случаях стоит проверить, сколько времени занимает выполнение функции на тестовых данных, чтобы избежать проблем с производительностью в реальных приложениях.
Вместо того чтобы полагаться на один метод, рекомендуется тщательно анализировать возможные разделители в исходных данных и тестировать решения с реальными примерами. Это поможет избежать ошибок при обработке строк с нестандартными разделителями.
Как объединить explode с array_map для постобработки значений
В PHP можно использовать функцию explode для разделения строки на элементы массива. Однако, часто требуется не просто разбить строку, но и применить некоторую постобработку к каждому элементу массива. Для этого удобно сочетать explode с array_map, которая позволяет выполнить операцию над каждым элементом массива.
Рассмотрим пример. Допустим, у нас есть строка с перечислением чисел, разделённых запятой, и мы хотим преобразовать эти числа в массив целых чисел, после чего умножить каждое число на 2:
$str = "1,2,3,4,5";
$numbers = explode(",", $str); // Разбиваем строку на массив
$processedNumbers = array_map(function($item) {
return (int)$item * 2; // Умножаем каждое число на 2
}, $numbers);
Здесь explode(",", $str) разделяет строку по запятой, а array_map применяется для обработки каждого элемента массива, умножая его на 2. В результате мы получаем массив: [2, 4, 6, 8, 10].
Такой подход полезен, когда необходимо выполнить сложные преобразования элементов массива, например, обрезку пробелов, преобразование в другой тип данных или выполнение математических операций.
Еще один пример – когда строка содержит даты в формате «день.месяц.год», и мы хотим преобразовать их в объект DateTime:
$dateString = "12.05.2025,15.06.2024,20.07.2023";
$dates = explode(",", $dateString); // Разбиваем строку по запятой
$processedDates = array_map(function($date) {
return DateTime::createFromFormat('d.m.Y', $date); // Преобразуем строку в объект DateTime
}, $dates);
В данном примере array_map используется для преобразования строк в объекты DateTime, что удобно при работе с датами в формате «день.месяц.год».
Использование explode и array_map помогает элегантно решать задачи обработки строк и массивов, при этом код остаётся компактным и читаемым.
