Сократите текст, но оставьте последнее слово - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть строка, которую я хочу сократить, чтобы она всегда составляла не более 20 символов.

  • Я не хочу, чтобы слова обрезались.
  • Когда это слишком долго, я добавляю (...) в конце, и это (...) включается в 20 символов.
$string = "Hello my name is Ana and I live in Egypt";
$length = 20;

if(strlen($string) > $length) {
  $string = wordwrap($string, $length - 6); // -6 because we count the chars of " (...)"
  $string = explode("\n", $string, 2);
  $string = $string[0].' (...)';
}

echo $string; // output "Hello my name (...)"

Но теперь я хочу сделать то же самое, но оставляя последнее слово.

Итак, ожидаемый результат: «Привет, мой (...) Египет»

Я действительно не знаю, как лучше всего это сделать. Если есть какие-нибудь полезные функции, о которых я не знаю, или, может быть, Regex?

1 Ответ

1 голос
/ 18 апреля 2020

Так вот как я это сделал. Он не обрабатывает случаи, когда первое и последнее слова имеют длину более 20 символов, но это то, что я ищу, потому что приоритет заключается в том, что слова не обрезаются.

function shorten($string, $length = 20) {
  if(strlen($string) > $length) {
    $words = explode(' ', $string);
    $lastWord = end($words);
    $charsLastWord = strlen($lastWord);

    $string = wordwrap($string, $length - 7 - $charsLastWord); // -7 because we count the chars of " (...) "
    $string = explode("\n", $string, 2);
    $string = $string[0].' (...) '.$lastWord;
  }
  return $string;
}

echo shorten("Hello my name is Ana and I live in Egypt");
// output Hello my (...) Egypt

echo shorten("Hello my name is Ana and I live in ACountryWithALongName");
// output Hello (...) ACountryWithALongName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...