How to split a long string without breaking words?
This code avoid breaking words, you won't get it using wordwrap().
The maximum length is defined using $maxLineLength
. I've done some tests and it works fine.
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';$words = explode(' ', $longString);$maxLineLength = 18;$currentLength = 0;$index = 0;foreach ($words as $word) { // +1 because the word will receive back the space in the end that it loses in explode() $wordLength = strlen($word) + 1; if (($currentLength + $wordLength) <= $maxLineLength) { $output[$index] .= $word . ' '; $currentLength += $wordLength; } else { $index += 1; $currentLength = $wordLength; $output[$index] = $word; }}
Use wordwrap()
to insert the linebreaks, then explode()
on those linebreaks:
// Wrap at 15 characters$x = 15;$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';$lines = explode("\n", wordwrap($longString, $x));var_dump($lines);array(6) { [0]=> string(13) "I like apple." [1]=> string(8) "You like" [2]=> string(11) "oranges. We" [3]=> string(13) "like fruit. I" [4]=> string(10) "like meat," [5]=> string(5) "also."}