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.
其中$ longString是句子的集合,x是每行的字符长度。它可能相当长,我想基本上以数组的形式将它分成多行。
So for example,
例如,
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';
$lines = str_split_whole_word($longString, x);
$lines = Array(
[0] = 'I like apple. You'
[1] = 'like oranges. We'
[2] = and so on...
)
5 个解决方案
#1
12
This solution ensures that the lines will be created without breaking words, what you won't get using wordwrap(). It will use the space to explode the string and then use a foreach to loop the array and create the lines without breaking works and with a maximum length that is defined using $maxLineLength
. Below is the code, i've done some tests and it works fine.
此解决方案可确保创建行而不会破坏单词,使用wordwrap()将无法获得。它将使用空间来爆炸字符串,然后使用foreach循环数组并创建行而不破坏工作并使用$ maxLineLength定义的最大长度。下面是代码,我做了一些测试,它工作正常。
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';
$arrayWords = explode(' ', $longString);
$maxLineLength = 18;
$currentLength = 0;
$index = 0;
foreach ($arrayWords 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) {
$arrayOutput[$index] .= $word . ' ';
$currentLength += $wordLength;
} else {
$index += 1;
$currentLength = $wordLength;
$arrayOutput[$index] = $word;
}
}
#2
41
The easiest solution is to use wordwrap()
, and explode()
on the new line, like so:
最简单的解决方案是在新行上使用wordwrap()和explode(),如下所示:
$array = explode( "\n", wordwrap( $str, $x));
Where $x
is a number of characters to wrap the string on.
其中$ x是要包装字符串的字符数。
#3
8
Use wordwrap()
to insert the linebreaks, then explode()
on those linebreaks:
使用wordwrap()插入换行符,然后在这些换行符上爆炸():
// 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."
}
#4
1
Made function from Marcio simao comment
从Marcio simao发表评论
function explodeByStringLength($string,$maxLineLength)
{
if(!empty($string))
{
$arrayWords = explode(" ",$string);
if(count($arrayWords) > 1)
{
$maxLineLength;
$currentLength = 0;
foreach($arrayWords as $word)
{
$wordLength = strlen($word);
if( ( $currentLength + $wordLength ) <= $maxLineLength )
{
$currentLength += $wordLength;
$arrayOutput[] = $word;
}
else
{
break;
}
}
return implode(" ",$arrayOutput);
}
else
{
return $string;
}
}
else return $string;
}
#5
1
Try This Function.......
试试这个功能.......
<?php
/**
* trims text to a space then adds ellipses if desired
* @param string $input text to trim
* @param int $length in characters to trim to
* @param bool $ellipses if ellipses (...) are to be added
* @param bool $strip_html if html tags are to be stripped
* @param bool $strip_style if css style are to be stripped
* @return string
*/
function trim_text($input, $length, $ellipses = true, $strip_tag = true,$strip_style = true) {
//strip tags, if desired
if ($strip_tag) {
$input = strip_tags($input);
}
//strip tags, if desired
if ($strip_style) {
$input = preg_replace('/(<[^>]+) style=".*?"/i', '$1',$input);
}
if($length=='full')
{
$trimmed_text=$input;
}
else
{
//no need to trim, already shorter than trim length
if (strlen($input) <= $length) {
return $input;
}
//find last space within length
$last_space = strrpos(substr($input, 0, $length), ' ');
$trimmed_text = substr($input, 0, $last_space);
//add ellipses (...)
if ($ellipses) {
$trimmed_text .= '...';
}
}
return $trimmed_text;
}
?>
Credit: http://www.ebrueggeman.com/blog/abbreviate-text-without-cutting-words-in-half
#1
12
This solution ensures that the lines will be created without breaking words, what you won't get using wordwrap(). It will use the space to explode the string and then use a foreach to loop the array and create the lines without breaking works and with a maximum length that is defined using $maxLineLength
. Below is the code, i've done some tests and it works fine.
此解决方案可确保创建行而不会破坏单词,使用wordwrap()将无法获得。它将使用空间来爆炸字符串,然后使用foreach循环数组并创建行而不破坏工作并使用$ maxLineLength定义的最大长度。下面是代码,我做了一些测试,它工作正常。
$longString = 'I like apple. You like oranges. We like fruit. I like meat, also.';
$arrayWords = explode(' ', $longString);
$maxLineLength = 18;
$currentLength = 0;
$index = 0;
foreach ($arrayWords 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) {
$arrayOutput[$index] .= $word . ' ';
$currentLength += $wordLength;
} else {
$index += 1;
$currentLength = $wordLength;
$arrayOutput[$index] = $word;
}
}
#2
41
The easiest solution is to use wordwrap()
, and explode()
on the new line, like so:
最简单的解决方案是在新行上使用wordwrap()和explode(),如下所示:
$array = explode( "\n", wordwrap( $str, $x));
Where $x
is a number of characters to wrap the string on.
其中$ x是要包装字符串的字符数。
#3
8
Use wordwrap()
to insert the linebreaks, then explode()
on those linebreaks:
使用wordwrap()插入换行符,然后在这些换行符上爆炸():
// 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."
}
#4
1
Made function from Marcio simao comment
从Marcio simao发表评论
function explodeByStringLength($string,$maxLineLength)
{
if(!empty($string))
{
$arrayWords = explode(" ",$string);
if(count($arrayWords) > 1)
{
$maxLineLength;
$currentLength = 0;
foreach($arrayWords as $word)
{
$wordLength = strlen($word);
if( ( $currentLength + $wordLength ) <= $maxLineLength )
{
$currentLength += $wordLength;
$arrayOutput[] = $word;
}
else
{
break;
}
}
return implode(" ",$arrayOutput);
}
else
{
return $string;
}
}
else return $string;
}
#5
1
Try This Function.......
试试这个功能.......
<?php
/**
* trims text to a space then adds ellipses if desired
* @param string $input text to trim
* @param int $length in characters to trim to
* @param bool $ellipses if ellipses (...) are to be added
* @param bool $strip_html if html tags are to be stripped
* @param bool $strip_style if css style are to be stripped
* @return string
*/
function trim_text($input, $length, $ellipses = true, $strip_tag = true,$strip_style = true) {
//strip tags, if desired
if ($strip_tag) {
$input = strip_tags($input);
}
//strip tags, if desired
if ($strip_style) {
$input = preg_replace('/(<[^>]+) style=".*?"/i', '$1',$input);
}
if($length=='full')
{
$trimmed_text=$input;
}
else
{
//no need to trim, already shorter than trim length
if (strlen($input) <= $length) {
return $input;
}
//find last space within length
$last_space = strrpos(substr($input, 0, $length), ' ');
$trimmed_text = substr($input, 0, $last_space);
//add ellipses (...)
if ($ellipses) {
$trimmed_text .= '...';
}
}
return $trimmed_text;
}
?>
Credit: http://www.ebrueggeman.com/blog/abbreviate-text-without-cutting-words-in-half