Как я могу обрезать строку до первых 20 слов в PHP? - PullRequest
56 голосов
/ 08 июня 2009

Как я могу обрезать строку после 20 слов в PHP?

Ответы [ 27 ]

123 голосов
/ 08 июня 2009
function limit_text($text, $limit) {
      if (str_word_count($text, 0) > $limit) {
          $words = str_word_count($text, 2);
          $pos = array_keys($words);
          $text = substr($text, 0, $pos[$limit]) . '...';
      }
      return $text;
    }

echo limit_text('Hello here is a long sentence blah blah blah blah blah hahahaha haha haaaaaa', 5);

Выходы:

Hello here is a long ...
26 голосов
/ 08 июня 2009

Измените число 3 на число 20 ниже, чтобы получить первые 20 слов, или передайте его в качестве параметра. Ниже показано, как получить первые 3 слова: (поэтому измените значение 3 на 20, чтобы изменить значение по умолчанию):

function first3words($s, $limit=3) {
    return preg_replace('/((\w+\W*){'.($limit-1).'}(\w+))(.*)/', '${1}', $s);   
}

var_dump(first3words("hello yes, world wah ha ha"));  # => "hello yes, world"
var_dump(first3words("hello yes,world wah ha ha"));   # => "hello yes,world"
var_dump(first3words("hello yes world wah ha ha"));   # => "hello yes world"
var_dump(first3words("hello yes world"));  # => "hello yes world"
var_dump(first3words("hello yes world.")); # => "hello yes world"
var_dump(first3words("hello yes"));  # => "hello yes"
var_dump(first3words("hello"));  # => "hello"
var_dump(first3words("a")); # => "a"
var_dump(first3words(""));  # => ""
11 голосов
/ 10 апреля 2012

до ближайшего места

Обрезает до ближайшего предшествующего пробела целевого персонажа. Демо

  • $str Строка для усечения
  • $chars Количество символов, которые нужно удалить, может быть переопределено на $to_space
  • $to_space boolean для того, чтобы урезать или нет из пространства около $chars limit

Функция

function truncateString($str, $chars, $to_space, $replacement="...") {
   if($chars > strlen($str)) return $str;

   $str = substr($str, 0, $chars);
   $space_pos = strrpos($str, " ");
   if($to_space && $space_pos >= 0) 
       $str = substr($str, 0, strrpos($str, " "));

   return($str . $replacement);
}

Sample

<?php

$str = "this is a string that is just some text for you to test with";

print(truncateString($str, 20, false) . "\n");
print(truncateString($str, 22, false) . "\n");
print(truncateString($str, 24, true) . "\n");
print(truncateString($str, 26, true, " :)") . "\n");
print(truncateString($str, 28, true, "--") . "\n");

?>

выход

this is a string tha...
this is a string that ...
this is a string that...
this is a string that is :)
this is a string that is--
8 голосов
/ 08 июня 2009

использовать взорваться () .

Пример из документации.

// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

обратите внимание, что у функции explode есть функция limit. Таким образом, вы могли бы сделать что-то вроде

$message = implode(" ", explode(" ", $long_message, 20));
7 голосов
/ 01 марта 2014

Простой и полностью оборудованный метод truncate ():

function truncate($string, $width, $etc = ' ..')
{
    $wrapped = explode('$trun$', wordwrap($string, $width, '$trun$', false), 2);
    return $wrapped[0] . (isset($wrapped[1]) ? $etc : '');
}
6 голосов
/ 08 июня 2009

Попробуйте регулярное выражение.

Вам нужно что-то, что соответствовало бы 20 словам (или границам 20 слов).

Итак (мое регулярное выражение ужасно, поправьте меня, если это не верно):

/(\w+\b){20}/

А вот несколько примеров регулярных выражений в php .

5 голосов
/ 24 января 2012

Это не моё собственное творение, это модификация предыдущих постов. кредиты идут на karim79.

function limit_text($text, $limit) {
    $strings = $text;
      if (strlen($text) > $limit) {
          $words = str_word_count($text, 2);
          $pos = array_keys($words);
          if(sizeof($pos) >$limit)
          {
            $text = substr($text, 0, $pos[$limit]) . '...';
          }
          return $text;
      }
      return $text;
    }
4 голосов
/ 08 июня 2009

Разделить строку (в массив) на < пробел >, а затем взять первые 20 элементов этого массива.

4 голосов
/ 08 июня 2009

Это выглядит довольно хорошо для меня :

Распространенная проблема при создании динамического веб-страницы (где источник информации из базы данных, управление контентом система или внешний источник, такой как RSS-канал) является то, что ввод текста может быть слишком длинным и вызывать макет страницы «сломаться».

Одним из решений является усечение текста так что он умещается на странице. это звучит просто, но часто результаты не так, как ожидалось из-за слов и предложения обрезаются на неподходящие баллы.

3 голосов
/ 03 августа 2014

с тройными точками:

function limitWords($text, $limit) {
    $word_arr = explode(" ", $text);

    if (count($word_arr) > $limit) {
        $words = implode(" ", array_slice($word_arr , 0, $limit) ) . ' ...';
        return $words;
    }

    return $text;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...