Как выбрать первые 10 слов предложения?

Как я, с вывода, выбираю только первые 10 слов?

 implode(' ', array_slice(explode(' ', $sentence), 0, 10)); 

Чтобы добавить поддержку для других разрывов слов, таких как запятые и тире, preg_match дает быстрый способ и не требует разделения строки:

 function get_words($sentence, $count = 10) { preg_match("/(?:\w+(?:\W+|$)){0,$count}/", $sentence, $matches); return $matches[0]; } 

Как упоминает Pebbl, PHP не очень хорошо обрабатывает UTF-8 или Unicode, поэтому, если это вызывает беспокойство, вы можете заменить \w на [^\s,\.;\?\!] И \W для [\s,\.;\?\!] .

Простое разделение на пробелы будет работать некорректно, если вместо пространства в структуре предложения есть неожиданный символ или предложение содержит несколько объединенных пространств.

Следующая версия будет работать независимо от того, какое «пространство» вы используете между словами и может быть легко расширена для обработки других символов … в настоящее время она поддерживает любой символ пробела плюс. ; ? !

 function get_snippet( $str, $wordCount = 10 ) { return implode( '', array_slice( preg_split( '/([\s,\.;\?\!]+)/', $str, $wordCount*2+1, PREG_SPLIT_DELIM_CAPTURE ), 0, $wordCount*2-1 ) ); } 

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

Возьмем границу слова \w или ее обратную \W Я редко полагаюсь на них, главным образом потому, что – в зависимости от используемого вами программного обеспечения (например, определенных версий PHP) – они не всегда включают символы UTF-8 или Unicode .

В регулярных выражениях лучше быть конкретными, всегда. Чтобы ваши выражения могли обрабатывать такие вещи, как следующее, независимо от того, где они отображаются:

 echo get_snippet('Это не те дроиды, которые вы ищете', 5); /// outputs: Это не те дроиды, которые 

Однако, с точки зрения производительности, целесообразно избегать расщепления. Поэтому вы можете использовать обновленный подход Келли, но переключите \w на [^\s,\.;\?\!]+ И \W для [\s,\.;\?\!]+ . Хотя, лично мне нравится простота выражения расщепления, используемого выше, его легче читать и, следовательно, изменять. Однако стек PHP-функций немного уродлив 🙂

http://snipplr.com/view/8480/a-php-function-to-return-the-first-n-words-from-a-string/

 function shorten_string($string, $wordsreturned) { $retval = $string; // Just in case of a problem $array = explode(" ", $string); /* Already short enough, return the whole thing*/ if (count($array)<=$wordsreturned) { $retval = $string; } /* Need to chop of some words*/ else { array_splice($array, $wordsreturned); $retval = implode(" ", $array)." ..."; } return $retval; } 

Я предлагаю использовать str_word_count :

 <?php $str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit"; print_r(str_word_count($str, 1)); ?> 

Вышеприведенный пример выводит:

 Array ( [0] => Lorem [1] => ipsum [2] => dolor [3] => sit [4] => amet [5] => consectetur [6] => adipiscing [7] => elit ) 

Используйте цикл, чтобы получить нужные слова.

Источник: http://php.net/str_word_count

Чтобы выбрать 10 слов данного текста, вы можете реализовать следующую функцию:

 function first_words($text, $count=10) { $words = explode(' ', $text); $result = ''; for ($i = 0; $i < $count && isset($words[$i]); $i++) { $result .= $words[$i]; } return $result; } 

Это можно легко сделать, используя str_word_count()

 $first10words = implode(' ', array_slice(str_word_count($sentence,1), 0, 10)); 

Это может вам помочь. Функция возврата N нет. слов

 public function getNWordsFromString($text,$numberOfWords = 6) { if($text != null) { $textArray = explode(" ", $text); if(count($textArray) > $numberOfWords) { return implode(" ",array_slice($textArray, 0, $numberOfWords))."..."; } return $text; } return ""; } } 

Это полностью то, что мы ищем. Просто вырезаем n, вставленный в вашу программу, и бежим.

 function shorten_string($string, $wordsreturned) /* Returns the first $wordsreturned out of $string. If string contains fewer words than $wordsreturned, the entire string is returned. */ { $retval = $string; // Just in case of a problem $array = explode(" ", $string); if (count($array)<=$wordsreturned) /* Already short enough, return the whole thing */ { $retval = $string; } else /* Need to chop of some words */ { array_splice($array, $wordsreturned); $retval = implode(" ", $array)." ..."; } return $retval; } 

и просто вызовите функцию в вашем блоке кода так же, как

 $data_itr = shorten_string($Itinerary,25); 

Я делаю это так:

 function trim_by_words($string, $word_count = 10) { $string = explode(' ', $string); if (empty($string) == false) { $string = array_chunk($string, $word_count); $string = $string[0]; } $string = implode(' ', $string); return $string; } 

Совместимость с UTF8 …

Это может вам помочь. Функция для возврата 10 no. of words no. of words .

 function num_of_word($text,$numb) { $wordsArray = explode(" ", $text); $parts = array_chunk($wordsArray, $numb); $final = implode(" ", $parts[0]); if(isset($parts[1])) $final = $final." ..."; return $final; return; } echo num_of_word($text, 10); 

Попробуй это

 $str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.'; $arr = explode(" ", str_replace(",", ", ", $str)); for ($index = 0; $index < 10; $index++) { echo $arr[$index]. " "; } 

Я знаю, что на это не время отвечать, но пусть новые посетители сами выбирают собственные ответы.

  function get_first_num_of_words($string, $num_of_words) { $string = preg_replace('/\s+/', ' ', trim($string)); $words = explode(" ", $string); // an array // if number of words you want to get is greater than number of words in the string if ($num_of_words > count($words)) { // then use number of words in the string $num_of_words = count($words); } $new_string = ""; for ($i = 0; $i < $num_of_words; $i++) { $new_string .= $words[$i] . " "; } return trim($new_string); } 

Используйте его так:

 echo get_first_num_of_words("Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid, illo?", 5); 

Выход: Lorem ipsum dolor sit amet

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

 echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100); 

Выход: نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.

Я не понимаю, почему весь этот беспорядок, когда есть встроенная функция WordPress:

 <?= wp_trim_words(get_the_content(), 15, '...') ?> 

Это эхо первых 15 слов содержимого (он работает внутри обычного цикла) и добавляет многоточие.