我正在尝试将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 ....
答案 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()
。
上面的工作方式如下:
" "
)array_chunk
( chunk )数组分成3个单独的30个项目数组。implode()
数组,再次使用相同的空格分隔符将其作为字符串 - " "
。而且中提琴,你已经把它分块并根据你的意愿分开了弦。