Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将文本解析为3行而不拆分单词_Php_Arrays_String_Parsing - Fatal编程技术网

PHP将文本解析为3行而不拆分单词

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

我正在试图找出如何将文本解析为3行,每行最多15个字符,而不拆分单词。应用程序将在网页上显示带有“继续阅读”链接的摘要

我试图实现的一个例子如下:如果我们接受这个短语

The lazy dog jumped over the quick brown fox yesterday.
我希望每行最多有15个字符

我希望结果是什么的一个例子是:

The lazy dog
jumped over the
quick brown fox
  • 我试图避免这样的情况,例如“跳”一词被分成两行:“懒狗居”是15个字符
  • 第2行“跳过”正好是15个字符
  • 剩下的任何文本都不会被使用
我已经修改了提供的示例GentlemanMax,以在数组中输出结果:

/**
 * 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个字符)?你是正确的。我修改了这个例子。