Глиф Учебники

Как разбить строку на массив: explode

Справочник · PHP · 1 минута чтения

PHP
<?php
$tags = "php, mysql, html";
$list = explode(",", $tags);
print_r($list);
Вывод
Array
(
    [0] => php
    [1] =>  mysql
    [2] =>  html
)

explode(разделитель, строка) режет строку по разделителю и возвращает массив частей. Обратите внимание: у второй и третьей части остался пробел в начале — он стоял после запятой. Уберите пробелы у всех частей сразу:

PHP
<?php
$tags = "php, mysql, html";
$list = array_map('trim', explode(",", $tags));
echo implode("|", $list) . "\n";
Вывод
php|mysql|html

implode делает обратное: склеивает массив в строку через указанный разделитель.

Ограничить число частей

Третий аргумент — сколько частей нужно. Последняя часть забирает весь остаток строки:

PHP
<?php
[$key, $value] = explode("=", "title=Сказка = быль", 2);
echo $key . "\n";
echo $value . "\n";
Вывод
title
Сказка = быль

Пустые части

explode не выбрасывает пустые куски: explode(",", "a,,b") даёт три элемента, средний — пустая строка. А пустая строка на входе даёт массив из одного пустого элемента, а не пустой массив. Если пустые части не нужны, отфильтруйте их:

PHP
<?php
$parts = array_filter(array_map('trim', explode(",", "минск, ,брест,")), fn($s) => $s !== '');
echo count($parts) . "\n";
echo implode(", ", $parts) . "\n";
Вывод
2
минск, брест

array_filter сохраняет исходные ключи; если нужен список с нуля, оберните результат в array_values.

Несколько разделителей и пробелы

Если части разделены пробелами разной длины, запятыми и переносами строк вперемешку, нужна preg_split — разбивка по регулярному выражению (шаблону, который описывает, какие знаки искать):

PHP
<?php
$text = "Минск  Брест,Гомель";
$words = preg_split('/[\s,]+/u', $text, -1, PREG_SPLIT_NO_EMPTY);
echo count($words) . "\n";
echo implode(" / ", $words) . "\n";
Вывод
3
Минск / Брест / Гомель

[\s,]+ — один или несколько пробельных знаков или запятых подряд, флаг u — работа с UTF-8, PREG_SPLIT_NO_EMPTY — без пустых частей.

Текст по строкам надёжнее делить так: preg_split('/\R/', $text). \R означает любой перенос строки — и \n из Linux, и \r\n из Windows. После explode("\n", …) у строк из Windows остался бы невидимый \r в конце.

На отдельные буквы

PHP
<?php
echo implode(" ", mb_str_split("Лида")) . "\n";
Вывод
Л и д а

str_split делит по байтам и ломает русские буквы, mb_str_split — по буквам (есть с PHP 7.4).