fork download
  1. <?php
  2.  
  3. $test = <<<'EOF'
  4. анон тестировал testiroval da оп_хуй как-то $op_hui $mamkuEbal
  5. EOF;
  6.  
  7. /**
  8.  * Ну нихуя себе, пхпдок!
  9.  * @param string $text текст который будем парсить
  10.  * @return array|false результат в формате 'wordsNumber'=>количество слов,
  11.  * 'words'=>$result , где результ в формате слово=Ю количество вхождений,
  12.  * либо фолс если что-то пошло не так
  13.  */
  14. function countWords($text) {
  15. if(!is_string($text) || empty($text)){
  16. return false;
  17. }
  18.  
  19. $textToLower = mb_strtolower($text);
  20. $wordRegexp = "/[а-яa-zё\-]+/ui";
  21. $count = preg_match_all($wordRegexp, $textToLower, $pregResult);
  22. $words = $pregResult[0];
  23.  
  24. $result = [];
  25. foreach($words as $word) {
  26. if (isset($result[$word])) {
  27. $result[$word]++;
  28. } else {
  29. $result[$word] = 1;
  30. }
  31. }
  32.  
  33. arsort($result);
  34. return [
  35. 'wordsNumber'=>$count,
  36. 'words'=>$result
  37. ];
  38. }
  39.  
  40. $parsedText = countWords($test);
  41. if(!$parsedText){
  42. echo "Сасай";
  43. }else{
  44. echo "Всего слов в тексте - {$parsedText['wordsNumber']}".PHP_EOL;
  45. foreach ($parsedText['words'] as $word => $occurrence) {
  46. echo "$word - встречается $occurrence раз".PHP_EOL;
  47. }
  48. }
  49.  
  50.  
  51.  
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
Всего слов в тексте - 10
как-то -  встречается 1 раз
op -  встречается 1 раз
hui -  встречается 1 раз
mamkuebal -  встречается 1 раз
хуй -  встречается 1 раз
оп -  встречается 1 раз
тестировал -  встречается 1 раз
testiroval -  встречается 1 раз
da -  встречается 1 раз
анон -  встречается 1 раз