PHP Manual Wordwrap функция, почти там - PullRequest
0 голосов
/ 22 сентября 2018

По сути, мне нужно сделать функцию переноса слов, без использования 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]." ";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...