1

Chunk split: примеры (PHP)

Разделение строк с помощью chunk_split в PHP
Раздел: Работа со строками
chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string

Функция chunk_split

Функция chunk_split() разбивает строку на части (чанки) заданной длины и разделяет их указанным разделителем. Эта операция часто применяется для форматирования текстовых данных, например, при подготовке строк для кодирования в base64 или для переноса длинных строк в электронной почте.

Синтаксис и параметры

Синтаксис функции: chunk_split(string $string, int $length = 76, string $separator = "\r\n")

  • $string (обязательный) - исходная строка для разбивки.
  • $length (необязательный) - длина каждого фрагмента (чанка) в символах. Значение по умолчанию - 76.
  • $separator (необязательный) - строка-разделитель, которая вставляется между чанками. По умолчанию используется последовательность "\r\n" (возврат каретки и перевод строки).

Функция возвращает строку, разделенную на части, или пустую строку, если входная строка пуста.

Базовые примеры использования

Разбивка строки с параметрами по умолчанию

Стандартный пример разбивки строки на части по 76 символов.

$original = 'Этот текст является демонстрацией работы функции chunk_split.';
$result = chunk_split($original);
echo $result;
Этот текст является демонстрацией работы функции chunk_split.
Использование пользовательской длины и разделителя

Изменение размера фрагмента и символа-разделителя.

$text = '1234567890';
$chunked = chunk_split($text, 3, '|');
echo $chunked;
123|456|789|0|
Обработка пустой строки

Поведение функции при передаче пустой строки.

$empty = '';
$result = chunk_split($empty, 5, '-');
var_dump($result);
string(0) ""

Похожие функции в PHP

Функция str_split() разбивает строку на массив фрагментов заданной длины. В отличие от chunk_split(), не добавляет разделитель между частями и возвращает массив.

print_r(str_split('abcdef', 2));
Array
(
    [0] => ab
    [1] => cd
    [2] => ef
)

Функция wordwrap() переносит строку по указанному количеству символов, но старается разбить строку по границам слов. Полезна для форматирования текста.

echo wordwrap('Очень длинная строка для примера', 10, "\n");
Очень
длинная
строка для
примера

chunk_split() предпочтительнее для бинарных данных или строгого разбиения по символам, в то время как wordwrap() лучше подходит для текстового форматирования.

Типичные ошибки

Использование нулевой длины чанка

Указание длины фрагмента равной 0 приводит к предупреждению и возврату пустой строки.

$result = @chunk_split('test', 0, '-');
echo $result;
Ожидание удаления последнего разделителя

Функция всегда добавляет разделитель в конец строки, что иногда является неожиданным.

$chunked = chunk_split('12345', 2, ',');
echo $chunked; // Результат: "12,34,5," а не "12,34,5"
12,34,5,
Передача отрицательной длины

Отрицательное значение параметра длины приводит к предупреждению и разбивке по умолчанию (76 символов).

$result = @chunk_split('abcdef', -1, '-');
echo $result;
abcdef

Изменения в последних версиях PHP

В PHP 8.0 поведение функции при передаче отрицательного значения параметра $length было изменено. Теперь такая операция вызывает ошибку уровня E_WARNING, и функция возвращает null. Ранее отрицательные значения приводились к положительным.

// PHP 8.0+
try {
    $result = chunk_split('text', -5);
} catch (ValueError $e) {
    echo $e->getMessage();
}
chunk_split(): Argument #2 ($length) must be greater than 0

Расширенные примеры

Форматирование base64 строки

Классическое применение для разбивки base64 строки, например, при вставке в email.

Пример php
$data = file_get_contents('small_image.png');
$base64 = base64_encode($data);
$formatted = chunk_split($base64, 64, "\n");
echo substr($formatted, 0, 200) . '...';
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
...
Создание кастомного формата для вывода

Генерация строки с разделителями для последующего парсинга.

Пример php
$numbers = '001002003004005';
$formatted = chunk_split($numbers, 3, ';');
$array = explode(';', trim($formatted, ';'));
print_r($array);
Array
(
    [0] => 001
    [1] => 002
    [2] => 003
    [3] => 004
    [4] => 005
)
Обработка бинарных данных

Использование функции для разбивки шестнадцатеричного представления данных.

Пример php
$binary = hex2bin('deadbeef12345678');
$hex = bin2hex($binary);
$chunked = chunk_split($hex, 4, ' ');
echo $chunked;
dead beef 1234 5678 
Разбивка с многобайтовыми символами

Важное замечание: функция работает с байтами, а не с символами. Для многобайтовых кодировок требуется осторожность.

Пример php
$utf8 = 'Привет мир';
$result = chunk_split($utf8, 5, '|'); // Разбивка по байтам, а не по символам!
echo $result;
Приве|т мир|

Аналоги в других языках программирования

Chunk split в Python

В Python похожий результат достигается с помощью срезов (slices) или метода textwrap.wrap().

text = "1234567890"
chunk_size = 3
separator = "|"
result = separator.join([text[i:i+chunk_size] for i in range(0, len(text), chunk_size)])
print(result)
123|456|789|0

Chunk split в Javascript

В JavaScript можно использовать регулярные выражения или метод match().

let str = '1234567890';
let result = str.match(/.{1,3}/g).join('|');
console.log(result);
123|456|789|0

Chunk split в MySQL

Прямого аналога в MySQL нет, но для подобных задач могут применяться строковые функции, такие как SUBSTRING() в сочетании с циклом.

PHP chunk_split function comments

En
Chunk split Split a string into smaller chunks