基本上,我需要制作一个自动换行功能,而无需使用wordwrap(),字符串和长度都作为参数给出,我有一个长文本字符串,我想全部打印,但限制“ x每行字符数。
如果单词不适合该行,但单词长度小于每行的限制,则该单词将在下一行打印,而不是被剪切。
如果该单词大于每行的限制,那么我必须将其剪切并在下一行上打印其余字母。
我已经开发了这段代码,可以正常工作,它向我输出了https://prnt.sc/kxai5y,但是CircleCI测试期望这个http://prntscr.com/kxajwo,我认为这里有一些错误,例如,比较时我的字符串到测试字符串,它说我在每行这样的最后一行中都有一个空格:http://prntscr.com/kxajjc,如果您比较前两个,我也注意到削减不是100%图片,您将看到不同。我竭尽全力解决这个问题,但是我不能,我真的想要您的帮助,我正在尽力而为。
class Resolution implements TextWrapInterface {
public function textWrap(string $text,int $length):array {
//local variables
$words=explode(" ",$text); //separate the text into words
$arr=array(); //array used for return
$string=" ";
$limit=$length; //limit of characters per line
$line=0;//array line
for($i = 0; $i < count($words); $i++){
$string = $words[$i]." ";
if((strlen($words[$i])>$length)){
//cut the world and print the remaining letters on the next line
$this->cutWord($arr,$words[$i],$limit,$length,$line);
}else
if($limit>=strlen($string)){
//add the word in array line
$arr[$line]=(array_key_exists($line,$arr))?$arr[$line].$string:$string;
//subtract the limit with the quantity of characters
$limit-=strlen($string);
}else
if($limit<strlen($string)){
//line++ for inserting the string on a next index
$line++;
$limit=$length;
//add the word on array line
$arr[$line]=$string;
//subtract the limit with the quantity of characters
$limit-=strlen($string);
}
}
return $arr;
print_r($arr);
}
//and then I've got a cutWord function
private function cutWord(&$array,$word,&$limit,$length,$index){
for($i = 0; $i < strlen($word); $i++){
//verify if the index doesn't have any words in
if(($limit!=$length)&&($i==0)){
$index++; // jump an array line
$limit=$length; //limit receives starting value
}
//verify if the limit is > 0
if($limit<=0) {
$index++;
$limit=$length; //limit receives starting value
}
//add the letter in the array index concatenating with the previous
$array[$index]=(array_key_exists($index,$array))?$array[$index].$word[$i]:$word[$i];
$limit--;
}
$array[$index]=$array[$index]." ";
}