(PHP 5, PHP 7, PHP 8)
str_split — Convert a string to an array
string
The input string.
length
Maximum length of the chunk.
If the optional length
parameter is
specified, the returned array will be broken down into chunks with each
being length
in length, except the final chunk
which may be shorter if the string does not divide evenly. The default
length
is 1
, meaning every chunk will be one byte in size.
If length
is less than 1
,
a ValueError will be thrown.
Version | Description |
---|---|
8.2.0 |
If string is empty an empty array is now returned.
Previously an array containing a single empty string was returned.
|
8.0.0 |
If length is less than 1 ,
a ValueError will be thrown now;
previously, an error of level E_WARNING
has been raised instead, and the function returned false .
|
Example #1 Example uses of str_split()
<?php
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);
print_r($arr2);
?>
The above example will output:
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 )
Note:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string. mb_str_split() can be used to split the string into code points. grapheme_str_split() can be used to split the string into grapheme clusters.
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. "
}
?>