Преобразование строковых данных в массивы в PHP
Основные способы разбиения строки на массив в PHP
Как разбить строку на массив по фиксированному разделителю?
Самый распространённый инструмент — функция explode. Она принимает разделитель и строку, возвращает массив фрагментов.
<?php
$colors = 'красный,зелёный,синий';
$arr = explode(',', $colors);
print_r($arr);
?>удалить пустые массивы php (удалить пустые массивы из массива в php)
Array
(
[0] => красный
[1] => зелёный
[2] => синий
)преобразовать массив в строку php (преобразовать массив в строку в php)
Если разделитель не найден, explode вернёт массив с одним элементом — исходной строкой. Третий параметр limit ограничивает количество элементов: положительное значение — максимум фрагментов, отрицательное — удаляет последние элементы.
Типичная ошибка: лишние пустые строки возникают при наличии разделителя в начале, конце или подряд. Например, ',,яблоко' даёт пустой элемент. Решение — применить array_filter после explode или заменить explode на preg_split с флагом PREG_SPLIT_NO_EMPTY.
Как разбить строку по регулярному выражению?
Функция preg_split принимает регулярное выражение и строку. Подходит для сложных разделителей, например, пробелы разной длины или знаки препинания.
<?php
$text = 'яблоко, груша; вишня банан';
$fruits = preg_split('/[;, ]+/', $text);
print_r($fruits);
?>посчитать массив php (посчитать элементы массива в php)
Array
(
[0] => яблоко
[1] => груша
[2] => вишня
[3] => банан
)Php сравнить массивы (сравнить массивы в php)
Флаг PREG_SPLIT_NO_EMPTY удалит пустые элементы. Флаг PREG_SPLIT_DELIM_CAPTURE включает разделители в результат.
Проблема: регулярное выражение может быть слишком медленным для простых случаев. Также требуется экранирование специальных символов (точка, звёздочка), если они используются как литералы. Проверяйте выражение на тестовых строках.
Как разбить строку на части фиксированной длины?
Функция str_split делит строку на массив подстрок одинаковой длины. Если длина не указана, по умолчанию 1 символ.
<?php
$hex = 'AABBCC';
$parts = str_split($hex, 2);
print_r($parts);
?>Php отсортировать массив (отсортировать массив в php)
Array
(
[0] => AA
[1] => BB
[2] => CC
)Php разбить строку на массив (разбить строку на массив в php)
Для многобайтовых кодировок используйте mb_split или функцию mb_str_split (PHP 7.4+).
Ошибка: str_split некорректно работает с UTF-8 символами (разбивает по байтам). Для кириллицы или эмодзи применяйте mb_str_split.
Как получить массив слов из строки?
Функция str_word_count с флагом 1 возвращает массив слов, игнорируя знаки препинания. Второй параметр может задавать маску символов, считающихся буквами.
<?php
$sentence = 'Привет, мир! Как дела?';
$words = str_word_count($sentence, 1, 'А-Яа-яЁё');
print_r($words);
?>Php массив добавление (добавить элемент в массив в php)
Array
(
[0] => Привет
[1] => мир
[2] => Как
[3] => дела
)Php перебор массива (перебрать массив в php)
Проблема: по умолчанию str_word_count учитывает только латиницу. Для других языков нужно явно указывать допустимые символы. Также функция не разбивает строки с дефисами или апострофами, если они не добавлены.
Как разобрать строку по набору разделителей последовательно?
Функция strtok позволяет разбивать строку по одному или нескольким символам, последовательно извлекая токены. Полезно для больших строк или потоковой обработки.
<?php
$data = 'яблоко; груша, вишня.банан';
$tok = strtok($data, '; ,.');
while ($tok !== false) {
echo $tok . PHP_EOL;
$tok = strtok('; ,.');
}
?>наличие в массиве php (проверить наличие элемента в массиве в php)
яблоко груша вишня банан
Php конец массива (получить последний элемент массива в php)
Первый вызов принимает исходную строку, последующие — только разделители.
Ошибка: забыть вызвать повторно strtok с разделителем, из-за чего цикл станет бесконечным. Также strtok модифицирует исходную строку (работает с копией).
Как разбить строку с экранированными разделителями (CSV)?
Для CSV-строк с кавычками используйте str_getcsv. Она учитывает экранирование и возвращает массив полей.
<?php
$csv = 'ООО "Ромашка", ул. Пушкина, д.10';
$fields = str_getcsv($csv);
print_r($fields);
?>
Array
(
[0] => ООО "Ромашка"
[1] => ул. Пушкина, д.10
)
Можно указать разделитель, ограничитель и экранирующий символ.
Проблема: некорректное экранирование кавычек внутри поля может привести к неверному разбиению. Для сложных CSV используйте fgetcsv.
Ниже приведены расширенные примеры разбиения строк на массив в PHP с подробными пояснениями.
Пример 1. Разбиение по нескольким символам с помощью preg_split
<?php
$log = '2025-03-21 10:15:30 ERROR: File not found';
// Разделители: пробел, двоеточие, дефис, точка
$parts = preg_split('/[\s:\-.\.]+/', $log);
print_r($parts);
?>
Array
(
[0] => 2025
[1] => 03
[2] => 21
[3] => 10
[4] => 15
[5] => 30
[6] => ERROR
[7] => File not found
)
Обратите внимание: последний элемент содержит пробел, потому что несколько пробелов подряд схлопнулись. Если нужно сохранить отдельные слова, используйте другой шаблон. Для удаления пустых элементов добавьте флаг PREG_SPLIT_NO_EMPTY.
Пример 2. Разбиение с ограничением количества фрагментов (explode с limit)
<?php
$path = '/home/user/docs/file.txt';
$parts = explode('/', $path, 3);
print_r($parts);
// limit = 3: массив из максимум 3 элементов, последний содержит остаток
?>
Array
(
[0] =>
[1] => home
[2] => user/docs/file.txt
)
Отрицательный limit удаляет последние N элементов. Например, explode('/', $path, -1) вернёт ['', 'home', 'user', 'docs'].
Пример 3. Разбиение многобайтовой строки (кириллица) с помощью mb_str_split
<?php
$text = 'Привет, мир!';
$chars = mb_str_split($text);
print_r($chars);
?>
Array
(
[0] => П
[1] => р
[2] => и
[3] => в
[4] => е
[5] => т
[6] => ,
[7] =>
[8] => м
[9] => и
[10] => р
[11] => !
)
Без mb_str_split str_split выдал бы байтовые последовательности, нечитаемые для пользователя.
Пример 4. Разбиение и проверка валидности email-адресов
<?php
$emails = 'user1@example.com, user2@test.org; invalid-email';
$pattern = '/[;,]+\s*/';
$list = preg_split($pattern, $emails);
foreach ($list as $email) {
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Верный: $email\n";
} else {
echo "Ошибочный: $email\n";
}
}
?>
Верный: user1@example.com Верный: user2@test.org Ошибочный: invalid-email
Здесь preg_split разбивает строку по точке с запятой или запятой с последующими пробелами.
Пример 5. Разбиение с сохранением разделителей (PREG_SPLIT_DELIM_CAPTURE)
<?php
$url = 'https://example.com/page?id=1&name=test';
$parts = preg_split('/([?&])/', $url, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($parts);
?>
Array
(
[0] => https://example.com/page
[1] => ?
[2] => id=1
[3] => &
[4] => name=test
)
Такой подход удобен при ручном разборе URL или параметров запроса, когда нужны сами разделители.
Пример 6. Использование str_getcsv для данных с экранированием
<?php
$line = '"Иванов, Иван", "Петров, Пётр", "Сидоров"';
$names = str_getcsv($line, ',', '"', '"');
print_r($names);
?>
Array
(
[0] => Иванов, Иван
[1] => Петров, Пётр
[2] => Сидоров
)
Второй параметр — разделитель полей, третий — ограничитель, четвёртый — экранирующий символ. Пробелы перед значениями сохраняются; их можно удалить trim-функцией.