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

Да, вы всегда можете попробовать сами и узнать:

file1.c

#include <stdio.h>

void call_hello(void (*fptr)(void));

static void hello(void) {
   puts("hello");
}

int main(void)
{
   void (*fptr)(void) = hello;

   call_hello(fptr);

   return 0;
}

file2.c

void call_hello(void (*fptr)(void))
{
   fptr();
}
58
задан glh 13 April 2013 в 10:28
поделиться

9 ответов

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 ...
126
ответ дан 24 November 2019 в 18:37
поделиться

использовать функцию токенизатора PHP strtok () в цикле.

$token = strtok($string, " "); // we assume that words are separated by sapce or tab
$i = 0;
$first20Words = '';
while ($token !== false && $i < 20) {
    $first20Words .= $token;
    $token = strtok(" ");
    $i++;
}
echo $first20Words;
2
ответ дан 24 November 2019 в 18:37
поделиться

как насчет

chunk_split($str,20);

Запись в Руководстве по PHP

-1
ответ дан 24 November 2019 в 18:37
поделиться

Что-то вроде этого, вероятно, может помочь:

<?php 
$words = implode(' ', array_slice(split($input, ' ', 21), 0, 20));
2
ответ дан 24 November 2019 в 18:37
поделиться

Мне это выглядит неплохо :

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

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

4
ответ дан 24 November 2019 в 18:37
поделиться

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

4
ответ дан 24 November 2019 в 18:37
поделиться

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

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

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

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

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

7
ответ дан 24 November 2019 в 18:37
поделиться

используйте explode () .

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

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

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

$message = implode(" ", explode(" ", $long_message, 20));
9
ответ дан 24 November 2019 в 18:37
поделиться

Измените число 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(""));  # => ""
29
ответ дан 24 November 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: