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 строки, например, при вставке в email.
$data = file_get_contents('small_image.png');
$base64 = base64_encode($data);
$formatted = chunk_split($base64, 64, "\n");
echo substr($formatted, 0, 200) . '...';iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg== ...
Генерация строки с разделителями для последующего парсинга.
$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
)Использование функции для разбивки шестнадцатеричного представления данных.
$binary = hex2bin('deadbeef12345678');
$hex = bin2hex($binary);
$chunked = chunk_split($hex, 4, ' ');
echo $chunked;dead beef 1234 5678
Важное замечание: функция работает с байтами, а не с символами. Для многобайтовых кодировок требуется осторожность.
$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() в сочетании с циклом.