I'm looking for something along the line of
str_split_whole_word[$longString, $x]
Where $longString
is a collection of sentences, and $x
is the character length for each line. It can be fairly long, and I want to basically split it into multiple lines in the form of an array.
For example:
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';
$lines = str_split_whole_word[$longString, $x];
Desired output:
$lines = Array[
[0] = 'I like apple. You'
[1] = 'like oranges. We'
[2] = and so on...
]
mickmackusa
39k11 gold badges76 silver badges112 bronze badges
asked Jun 29, 2012 at 0:44
The easiest solution is to use wordwrap[]
, and explode[]
on the new line, like so:
$array = explode[ "\n", wordwrap[ $str, $x]];
Where $x
is a number of characters to wrap the string on.
answered Jun 29, 2012 at 0:46
nickbnickb
58.5k12 gold badges102 silver badges141 bronze badges
2
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]
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."
}
answered Jun 29, 2012 at 0:46
Michael BerkowskiMichael Berkowski
263k45 gold badges434 silver badges380 bronze badges
0
My requirements were split text string after every 20 characters without break words. Use wordwrap[] to insert the linebreaks after every 20 characters So here is how I do it. hope this is helpful for others who find it this type of solution.
$charactersLimit = 20;
$yourTextString = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
$output = explode["\n", wordwrap[$yourTextString, $charactersLimit]];
Output like this:
Array
[
[0] => Lorem ipsum dolor
[1] => sit amet,
[2] => consectetuer
[3] => adipiscing elit.
]
answered Sep 30, 2020 at 7:54
This whole task can be accomplished with just one preg_
function call.
- Match any character between zero and
$maxLength
times. - Forget/Release the matched characters from #1 with
\K
. - Match the next one or more whitespace characters or the end of the string. The characters/position matched here will be consumed in the splitting process and will not appear in the output array.
- Set the
preg_
function to exclude the empty element that is produced by splitting on the end of string position withPREG_SPLIT_NO_EMPTY
.
Code: [Demo]
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';
$maxLength = 18;
var_export[
preg_split["/.{0,{$maxLength}}\K[?:\s+|$]/", $longString, 0, PREG_SPLIT_NO_EMPTY]
];
Output:
array [
0 => 'I like apple. You',
1 => 'like oranges. We',
2 => 'like fruit. I like',
3 => 'meat, also.',
]
If your input string might contain newlines, then just add the s
pattern modifier./.{0,{$maxLength}}\K[?:\s+|$]/s
[Demo]
answered Sep 25, 2020 at 7:00
mickmackusamickmackusa
39k11 gold badges76 silver badges112 bronze badges