将字符串拆分为新行

时间:2015-05-29 01:23:52

标签: php

我正在尝试将90个字符长的字符串拆分为三个30个长度的字符串。我不能简单地将长字符串分成三行(最坏情况),因为字符串中的单词会分裂。我尝试的代码如下(但不起作用),请帮助

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

    $str = "test string more and more text very long string can be upto length of 90";
    $line1 = $line2 = $line3 = "";

    $temp = explode(" ", $str);
    //var_dump($temp);

    for($i=0; $i<count($temp); $i++){
        if(strlen($line1) < 30){
            $line1. = $temp[$i]." ";

        }else if(strlen($line2) < 30) {
            $line2. = $temp[$i]." ";

        }else if(strlen($line3) < 30) {
            $line2. = $temp[$i]." ";

        }
    }

    //var_dump($line1);
?>

我试图在$ line1中尽可能多地从$ temp添加单词然后再添加到$ line2 ....

2 个答案:

答案 0 :(得分:2)

通常情况下,我会说wordwrap功能适用于:

$str = "test string more and more text very long string can be upto length of 90";
$wrapped = wordwrap($str, 30, "\n", true);
list($line1, $line2, $line3) = explode("\n", $wrapped . "\n\n");

\n上的额外$wrapped用于防止在少于3行的情况下出现错误。)

但是,您的问题有点不同。 wordwrap有时会制作第4行,而不是将一个字缩写为一半,这是你需要做的。如果需要剪切一个单词,wordwrap将只会产生第4行,所以也许试试这个:

$str = "test string more and more terxt very long string can be upto length of 90 bla bla bla3rr33";
$maxLen = 30;
$wrapped = wordwrap($str, $maxLen, "\n", true);
list($line1, $line2, $line3, $line4) = explode("\n", $wrapped . "\n\n\n");
if ($line4 !== '') {
    //fallback case: we have to split words in order to fit the string properly in 3 lines
    list($line1, $line2, $line3) = array_map('trim', str_split($str, $maxLen));
}

这段代码可以做一件坏事:当它只需要拆分一个时,它有时会拆分两个字。如果你需要的话,我会留给你弄清楚如何解决这个问题。

答案 1 :(得分:0)

这是另一种选择,假设所有单词都用空格分隔。

$words = explode(" ", $string);
$chunks = array_chunk($words, 30);

foreach($chunks as $chunk) {
    echo implode(" ", $chunk) . "\n\n\n";    
}

我们正在根据需要利用explode()array_chunk()implode()

Example

上面的工作方式如下:

  • 取出字符串并将其拆分为一个单词数组(分隔符为空格 - " "
  • 现在我们将array_chunk chunk )数组分成3个单独的30个项目数组。
  • 现在我们将循环遍历该数组块和implode()数组,再次使用相同的空格分隔符将其作为字符串 - " "

而且中提琴,你已经把它分块并根据你的意愿分开了弦。