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. "
}
?>str_split
(PHP 5, PHP 7, PHP 8)
str_split — Convert a string to an array
Description
Converts a string to an array.
Parameters
string-
The input string.
length-
Maximum length of the chunk.
Return Values
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.
Errors/Exceptions
If length is less than 1,
a ValueError will be thrown.
Changelog
| 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.
|
Examples
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
)
Notes
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.
See Also
- mb_str_split() - Given a multibyte string, return an array of its characters
- grapheme_str_split() - Split a string into an array
- chunk_split() - Split a string into smaller chunks
- preg_split() - Split string by a regular expression
- explode() - Split a string by a string
- count_chars() - Return information about characters used in a string
- str_word_count() - Return information about words used in a string
- for