Intereting Posts
header ('location: ..') не работает Предотвращение ошибки внутреннего сервера с помощью Symfony 2 / Monolog при неудачном соединении с gelf PHP-поток загружает содержимое веб-сайта до тех пор, Перезапись $ _POST для запросов PUT или DELETE file_get_contents () отключено для моего собственного сайта Ошибка при попытке получить данные из 2 таблиц codeigniter Как искать слэш (\) в MySQL? и почему escaping (\) не требуется для where (=), но для Like требуется? Как редактировать и сохранять пользовательские файлы конфигурации в Laravel? используя cron, чтобы заставить php-script запускать непрерывные процессы Функция почты PHP не отправляет никаких сообщений Получение пользовательского заголовка авторизации из входящего запроса PHP Как вставить HTML в объект PHP DOM? Поместите несколько массивов в один большой ассоциативный массив Пространство имен в PHP CodeIgniter Framework Запись в файл access_log Apache с php

Как получить только определенное количество слов из строки в php?

Вот что я пытаюсь сделать. У меня есть блок текста, и я хотел бы извлечь первые 50 слов из строки, не отрезая слова в середине. Вот почему я предпочел бы слова, противоположные символам, тогда я мог бы просто использовать функцию left ().

Я знаю, что функция str_word_count ($ var) вернет число слов в строке, но как я могу вернуть только первые 50 слов?

Я полностью погружаюсь в PHP, но пока не знаю многих строковых функций.

Спасибо заранее, Джейсон

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

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

function function_that_shortens_text_but_doesnt_cutoff_words($text, $length) { if(strlen($text) > $length) { $text = substr($text, 0, strpos($text, ' ', $length)); } return $text; } 

Тем не менее, если вы передадите 1 в качестве второго параметра str_word_count , он вернет массив, содержащий все слова, и вы можете использовать манипуляции с массивами. Кроме того, вы могли бы, хотя, это немного взломать, взорвать строку в пробелах и т. Д. Но это вводит много места для ошибок, таких как вещи, которые не являются словами, считающимися словами.

PS. Если вам нужна безопасная версия Unicode для вышеуказанной функции и установлены либо mbstring либо iconv , просто замените все строковые функции на их mb_ или iconv_ префиксом.

str_word_count принимает необязательный параметр, который сообщает ему, что возвращать.

Возвращает массив строк, которые являются словами:

 $words = str_word_count($var, 1); 

Затем вы можете нарезать что-то вроде:

 $len = min(50, count($words)); $first_fifty = array_slice($words, 0, $len); 

Вы уверены, что хотите определенное количество слов? Если вы делаете что-то вроде «предварительного просмотра», обычно лучше делать что-то вроде «До 300 символов, обрезанных на границе слова», и в этом случае вы можете использовать что-то вроде:

 if (strlen($str)>300) { $str = substr($str,0,300); $pos = strrpos($str, ' '); if ($pos !== false && $pos > 200) // If there is no space in the last 100 chars, just truncate $str = substr($str,0,$pos); // You may also want to add ellipses: // $str .= '...'; } 

Я нашел более простой способ сделать это:

function get_len_of_word($str,$number) { $array_str = explode(" ", $str); if(isset($array_str[$number])) { return implode(" ",array_slice($array_str, 0, $number)); } return $str; }

Вот еще один пример,

 function getWordsFromString($str,$word_count) { $new_str=$str; $_strArr=explode(" ",$str); $_tempArr=array(); if(count($_strArr)>$word_count) { foreach ($_strArr as $key=> $value) { $_tempArr[]=$value; if($key==$word_count-1) { $new_str=implode(" ",$_tempArr).' ...'; } } } return $new_str; } 
  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); 

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