W3docs

str_split()

Статья о функции PHP str_split(), которая разбивает строку на массив. Рассмотрим синтаксис, параметры и примеры использования.

Функция PHP str_split() разбивает строку на массив из более мелких частей. По умолчанию каждая часть — это один символ, но можно задать длину фрагментов фиксированного размера. Это основная функция, когда нужно перебирать строку посимвольно или обрабатывать её равными блоками.

На этой странице описан синтаксис, параметр длины фрагмента, возвращаемое значение и проблема с многобайтовыми строками, с которой сталкивается большинство разработчиков.

Синтаксис

str_split(string $string, int $length = 1): array

Функция принимает два параметра:

  • $string — строка для разбиения. Обязательный.
  • $length — длина каждого фрагмента в байтах. Необязательный; по умолчанию равен 1. Должен быть не менее 1 (значение меньше 1 вызывает ValueError в PHP 8.0+).

Функция возвращает массив строковых фрагментов. Если $string пустая, результатом будет пустой массив ([]) в PHP 8.2 и выше. Последний фрагмент может быть короче $length, если длина строки не кратна ему.

Разбиение на отдельные символы

Без второго аргумента str_split() возвращает по одному элементу массива на каждый символ. Это удобно для перебора каждого символа или подсчёта символов по категориям.

php— editable, runs on the server

Результат — массив, в котором каждый символ имеет свой индекс:

Array
(
    [0] => H
    [1] => e
    [2] => l
    [3] => l
    [4] => o
    [5] => ,
    [6] =>  
    [7] => W
    [8] => o
    [9] => r
    [10] => l
    [11] => d
    [12] => !
)

Разбиение на фрагменты фиксированной длины

Передайте $length, чтобы сгруппировать символы в фрагменты заданного размера. Это удобно для форматирования строк, например разбиения номера карты на группы или обработки бинарных данных фиксированными блоками.

<?php
$string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);
?>

Строка содержит 13 символов, поэтому она разбивается на четыре фрагмента по 3 символа и один финальный фрагмент из 1 символа:

Array
(
    [0] => Hel
    [1] => lo,
    [2] =>  Wo
    [3] => rld
    [4] => !
)

Осторожно с многобайтовыми строками

str_split() работает с байтами, а не символами. Для ASCII-текста один байт равен одному символу, поэтому поведение по умолчанию выглядит как посимвольное разбиение. Но UTF-8 символы, такие как é или эмодзи, занимают несколько байт, и str_split() разрежет их, создавая недопустимые фрагменты:

<?php
print_r(str_split("héllo"));
?>
Array
(
    [0] => h
    [1] => Ã
    [2] => ©
    [3] => l
    [4] => l
    [5] => o
)

Символ é вышел двумя повреждёнными байтами. Когда нужно разбить UTF-8 строку по настоящим символам, используйте вместо неё mb_str_split() — она учитывает многобайтовость и сохраняет каждый символ целым.

Когда использовать str_split() вместо explode()

Используйте str_split(), когда нужно разбить строку на фиксированные позиции или по длине — каждый отдельный символ или каждые N байт. Используйте explode(), когда нужно разбить по разделителю — например, запятой или пробелу. Чтобы собрать строку из массива обратно, смотрите implode(), а для разбиения по регулярному выражению — preg_split().

Практика

Практика
Что делает функция PHP 'str_split()'?
Что делает функция PHP 'str_split()'?
Was this page helpful?