Подсчитайте все слова, включая числа в строке php

Для подсчета слов в php-строке обычно мы можем использовать str_word_count, но я думаю, что не всегда хорошее решение

хороший пример:

$var ="Hello world!"; echo str_word_count($str); print_r(str_word_count($str, 1)); 

-> выход

  2 Array ( [0] => Hello [1] => world ) 

плохой пример:

 $var ="The example number 2 is a bad example it will not count numbers and punctuations !!"; 

-> выход:

  14 Array ( [0] => The [1] => example [2] => number [3] => is [4] => a [5] => bad [6] => example [7] => it [8] => will [9] => not [10] => count [11] => numbers [12] => and [13] => punctuations ) 

Есть ли хорошая предопределенная функция, чтобы сделать это правильно или мне нужно использовать preg_match ()?

Вы всегда можете разделить строку по пробелам и подсчитать результаты:

 $res = preg_split('/\s+/', $input); $count = count($res); 

С вашей строкой

 "The example number 2 is a bad example it will not count numbers and punctuations !!" 

Этот код даст 16 .

Преимущество использования этого над explode(' ', $string) заключается в том, что оно будет работать на многострочных строках, а также на вкладках, а не только на пробелах. Недостатком является то, что он медленнее.

Следующие функции count() и explode() будут эхо:

 Число 1 в этой строке будет подсчитано и содержит следующий счетчик 8

PHP:

 <?php $text = "The number 1 in this line will counted"; $count = count(explode(" ", $text)); echo "$text and it contains the following count $count"; ?> 

Редактировать:

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

 <?php $text = "The numbers 1 3 spaces and punctuations will not be counted !! . . "; $text = trim(preg_replace('/[^A-Za-z0-9\-]/', ' ', $text)); $text = preg_replace('/\s+/', ' ', $text); // used for the function to echo the line of text $string = $text; function clean($string) { return preg_replace('/[^A-Za-z0-9\-]/', ' ', $string); } echo clean($string); echo "<br>"; echo "There are "; echo $count = count(explode(" ", $text)); echo " words in this line, this includes the number(s)."; echo "<br>"; echo "It will not count punctuations."; ?> 

Используйте count(explode(' ', $var));

Вы можете попробовать это,

 <?php function word_count($sentence) { $break = explode(" ",$sentence); $count = count($break); return $count; } $count = "Count all words of this sentence"; echo word_count($count); //Output 6 ?> 

Подробнее о Word Count в PHP

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

  function get_num_of_words($string) { $string = preg_replace('/\s+/', ' ', trim($string)); $words = explode(" ", $string); return count($words); } $string="php string word count in simple way"; echo $count=get_num_of_words($string); 

Результатом будет 7

Я знаю, что вопрос старый, Тем не менее, я разделяю исправление, которое я принял для этого.

 $str ="Hello world !"; // you can include allowed special characters as third param. print_r(str_word_count($str, 1, '!')); 

вывода кода

 Array ( [0] => Hello [1] => world [2] => ! ) 

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

 print_r(str_word_count($str, 1, '0..9.~!@#$%^&*()-_=+{}[]\|;:?/<>.,')); 

от 0..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; }