如何在不打断单词的情况下拆分长字符串?

新手上路,请多包涵

我正在寻找类似的东西

str_split_whole_word($longString, $x)

其中 $longString 是句子的集合, $x 是每行的字符长度。它可以相当长,我想基本上以数组的形式将它分成多行。

例如:

 $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...
)

原文由 laketuna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 955
2 个回答

此代码避免断词,您不会使用 wordwrap() 获得它。

最大长度使用 $maxLineLength 定义。我做了一些测试,效果很好。

 $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) <= $maxLineLength) {
        $output[$index] .= $word . ' ';
        $currentLength += $wordLength;
    } else {
        $index += 1;
        $currentLength = $wordLength;
        $output[$index] = $word;
    }
}

原文由 Marcio Mazzucato 发布,翻译遵循 CC BY-SA 4.0 许可协议

最简单的解决方案是在新行上使用 wordwrap()explode() ,如下所示:

 $array = explode( "\n", wordwrap( $str, $x));

其中 $x 是用于包装字符串的字符数。

原文由 nickb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏