PHP将文本解析为3行而不拆分单词
我正在试图找出如何将文本解析为3行,每行最多15个字符,而不拆分单词。应用程序将在网页上显示带有“继续阅读”链接的摘要 我试图实现的一个例子如下:如果我们接受这个短语PHP将文本解析为3行而不拆分单词,php,arrays,string,parsing,Php,Arrays,String,Parsing,我正在试图找出如何将文本解析为3行,每行最多15个字符,而不拆分单词。应用程序将在网页上显示带有“继续阅读”链接的摘要 我试图实现的一个例子如下:如果我们接受这个短语 The lazy dog jumped over the quick brown fox yesterday. 我希望每行最多有15个字符 我希望结果是什么的一个例子是: The lazy dog jumped over the quick brown fox 我试图避免这样的情况,例如“跳”一词被分成两行:“懒狗居”是15
The lazy dog jumped over the quick brown fox yesterday.
我希望每行最多有15个字符
我希望结果是什么的一个例子是:
The lazy dog
jumped over the
quick brown fox
- 我试图避免这样的情况,例如“跳”一词被分成两行:“懒狗居”是15个字符李>
- 第2行“跳过”正好是15个字符
- 剩下的任何文本都不会被使用
/**
* Split Text
*
* @param string $string
* @param int $totalRow
* @param int $lineLength
*
* @return array
*/
function SplitText($string, $totalRow = 3 , $lineLength = 15) {
$result = [];
$row = 0;
$words = explode(' ', $string);
$result = '';
$line = '';
foreach( $words as $word ) {
if( strlen(trim($line)) + strlen($word) +1 > $lineLength ) {
$result[$row] = $line . trim($word);
++$row;
if ( $row == $totalRow ) { break; }
} else {
$line .= $word . ' ';
}
if(!empty($line)) $result[$row] = $line;
}
return $result;
}
此函数的最基本版本如下所示
function splitText($string, $lineLength = 15){
$words = explode(' ', $string);
$result = '';
$line = '';
foreach($words as $word){
if( strlen(trim($line)) + strlen($word) +1 > $lineLength ){
//Change PHP_EOL to your preferred new line delimiter
$result .= trim($line) . PHP_EOL; //remove the trailing space from line.
$line = $word . ' ';
}
else $line .= $word . ' ';
}
if(!empty($line)) $result .= $line;
return $result;
}
这将把你的绳子分成几行。这可以很容易地修改,以限制返回的行数或在最后一行末尾附加其他字符。注意,这假设单词由空格分隔,标点符号计数为15个字符
这还假设您想要
\n
(换行符)字符作为行分隔符。您可以将PHP\u EOL
替换为您想要的换行符。如果文本长度超过45个字符,会发生什么情况?我将在第3行中添加“…”。任何不适合这三行的文本都不会被使用。这是一个带有文章链接的摘要。我认为你的例子是错误的,第二行是不是应该跳过(正好15个字符)?你是正确的。我修改了这个例子。