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

时间:2017-01-05 16:08:33

标签: 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
  • 我试图避免诸如“跳跃”这样的情况。在两条线之间分开:"懒狗ju"是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;
}

1 个答案:

答案 0 :(得分:1)

此函数的最基本版本看起来像这样。

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_EOL替换为您想要的换行符。