(PHP 5, PHP 7, PHP 8)
str_split — Преобразовывает строку в массив
Функция разбивает строку на элементы массива.
stringВходная строка.
lengthМаксимальная длина части.
Функция возвращает массив строк.
Функция разобьёт строку на части заданной длины,
если указали необязательный аргумент length.
Длина каждой части будет равна значению аргумента length,
за исключением последней части, длина которой будет меньше, если строка делится неравномерно.
Значение параметра length по умолчанию — 1 байт.
Функция выбросит ошибку ValueError ,
если значение аргумента length окажется меньше 1.
| Версия | Описание |
|---|---|
| 8.2.0 |
Функция теперь возвращает пустой массив (array ), если параметр string не указали;
раньше возвращался массив (array ), который содержал одну пустую строку.
|
| 8.0.0 |
Функция теперь выбросит ошибку ValueError ,
если значение аргумента length окажется меньше 1;
раньше вместо этого функция вызывала ошибку уровня E_WARNING
и возвращала false .
|
Пример #1 Пример преобразования строки в массив функцией str_split()
<?php
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);
print_r($arr2);
?>Результат выполнения приведённого примера:
Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => [6] => F [7] => r [8] => i [9] => e [10] => n [11] => d ) Array ( [0] => Hel [1] => lo [2] => Fri [3] => end )
Замечание:
Функция str_split() разбивает строки в многобайтовых кодировках по байтам, а не по символам. На кодовые точки строку разбивает функция mb_str_split() . Для разбиения строки на кластеры графем вызывают функцию grapheme_str_split() .
The function str_split() is not 'aware' of words. Here is an adaptation of str_split() that is 'word-aware'.
<?php
$array = str_split_word_aware(
'In the beginning God created the heaven and the earth. And the earth was without form, and void; and darkness was upon the face of the deep.',
32
);
var_dump($array);
/**
* This function is similar to str_split() but this function keeps words intact; it never splits through a word.
*
* @return array<int, string>
*/
function str_split_word_aware(string $string, int $maxLengthOfLine): array
{
if ($maxLengthOfLine <= 0) {
throw new RuntimeException(sprintf('The function %s() must have a max length of line at least greater than one', __FUNCTION__));
}
$lines = [];
$words = explode(' ', $string);
$currentLine = '';
$lineAccumulator = '';
foreach ($words as $currentWord) {
$currentWordWithSpace = sprintf('%s ', $currentWord);
$lineAccumulator .= $currentWordWithSpace;
if (strlen($lineAccumulator) < $maxLengthOfLine) {
$currentLine = $lineAccumulator;
continue;
}
$lines[] = $currentLine;
// Overwrite the current line and accumulator with the current word
$currentLine = $currentWordWithSpace;
$lineAccumulator = $currentWordWithSpace;
}
if ($currentLine !== '') {
$lines[] = $currentLine;
}
return $lines;
}
?>
OUTPUT:
<?php
array(5) {
[0]=> string(29) "In the beginning God created "
[1]=> string(30) "the heaven and the earth. And "
[2]=> string(28) "the earth was without form, "
[3]=> string(27) "and void; and darkness was "
[4]=> string(27) "upon the face of the deep. "
}
?>