Str word count: примеры (PHP)

Функция str_word_count для подсчета слов в строке PHP
Раздел: Работа со строками
str_word_count(string string [, int format [, string characters]]): mixed
Функция str_word_count в PHP

Функция str_word_count() подсчитывает количество слов в строке. Она применяется для анализа текста, например, при обработке пользовательского ввода, генерации мета-описаний или проверке длины текста.

Аргументы функции

Функция принимает три аргумента:

  • $string (обязательный) - исходная строка для анализа.
  • $format (опциональный, по умолчанию 0) - определяет формат возвращаемого значения.
    0 - возвращает целое число (количество слов).
    1 - возвращает массив, содержащий все слова, найденные в строке.
    2 - возвращает ассоциативный массив, где ключ - позиция слова в строке, значение - само слово.
  • $characters (опциональный) - строка дополнительных символов, которые будут рассматриваться как часть слов. По умолчанию учитываются буквы и символ амперсанда (&).
Примеры использования
Простой подсчет
<?php
$text = 'Hello world, welcome to PHP!';
echo str_word_count($text);
?>
5
Возврат массива слов
<?php
$text = 'Hello world, welcome to PHP!';
print_r(str_word_count($text, 1));
?>
Array
(
    [0] => Hello
    [1] => world
    [2] => welcome
    [3] => to
    [4] => PHP
)
Возврат ассоциативного массива
<?php
$text = 'Hello world';
print_r(str_word_count($text, 2));
?>
Array
(
    [0] => Hello
    [6] => world
)
Использование третьего параметра
<?php
$text = 'Слово1 слово2, слово3!';
echo str_word_count($text, 0, '0..9');
?>
3
Похожие функции в PHP

Некоторые функции для работы со строками могут служить альтернативой или дополнением.

Разбивает строку по разделителю. Полезно, когда слова разделены конкретным символом. str_word_count() интеллектуальнее обрабатывает пунктуацию.

preg_split()

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

Подсчитывает количество вхождений подстроки. Может использоваться для поиска конкретного слова.

Типичные ошибки
Неверная интерпретация пунктуации

Функция считает словами строки, состоящие из пунктуации, если они не отделены пробелами.

<?php
$text = 'Test... is it one word?';
print_r(str_word_count($text, 1));
?>
Array
(
    [0] => Test
    [1] => is
    [2] => it
    [3] => one
    [4] => word
)

Многоточие не считается словом, но если бы не было пробелов, результат был бы другим.

Игнорирование цифр по умолчанию
<?php
$text = 'My number is 12345';
echo str_word_count($text);
?>
3

Цифра '12345' не считается словом без указания третьего параметра.

Изменения в PHP 8

В PHP 8.0 поведение функции str_word_count() было изменено для лучшей совместимости с Unicode. Теперь она корректно обрабатывает многобайтовые строки, когда используется третий параметр. В версиях до PHP 8.0 подсчет мог быть некорректен для не-ASCII символов, если не была включена расширение mbstring.

Расширенные примеры
Анализ текста с дефисами
Пример php
<?php
$text = 'Well-known phrase or up-to-date?';
// Без учета дефиса
print_r(str_word_count($text, 1));
// С учетом дефиса как части слова
print_r(str_word_count($text, 1, '-'));
?>
Array
(
    [0] => Well
    [1] => known
    [2] => phrase
    [3] => or
    [4] => up
    [5] => to
    [6] => date
)
Array
(
    [0] => Well-known
    [1] => phrase
    [2] => or
    [3] => up-to-date
)
Подсчет уникальных слов
Пример php
<?php
$text = 'apple orange apple banana orange';
$words = str_word_count($text, 1);
$uniqueWords = array_count_values($words);
print_r($uniqueWords);
?>
Array
(
    [apple] => 2
    [orange] => 2
    [banana] => 1
)
Определение позиции слова для выделения
Пример php
<?php
$text = 'This is a sample text for demonstration.';
$wordsWithPos = str_word_count($text, 2);
// Найти позицию слова 'sample'
foreach ($wordsWithPos as $pos => $word) {
    if ($word === 'sample') {
        echo 'Слово "sample" начинается на позиции: ' . $pos;
    }
}
?>
Слово "sample" начинается на позиции: 10
Обработка строк с HTML-тегами
Пример php
<?php
$html = '<p>Hello <strong>world</strong>!</p>';
// Предварительно удаляем теги
$cleanText = strip_tags($html);
echo str_word_count($cleanText);
?>
2
Аналоги в других языках

Str word count в Python

Метод split() разбивает строку по пробелам, но требуется дополнительная обработка пунктуации.

text = 'Hello world, welcome!'
words = text.split()
print(len(words))  # Простой подсчет
print(words)       # Список слов
3
['Hello', 'world,', 'welcome!']

Str word count в Javascript

Метод split() с регулярным выражением для фильтрации не-слов.

let text = 'Hello world, welcome!';
let words = text.split(/\W+/).filter(word => word.length > 0);
console.log(words.length); // 3
console.log(words); // ['Hello', 'world', 'welcome']

Str word count в MySQL

Отсутствует прямая функция. Можно использовать LENGTH() и REPLACE() для приблизительного подсчета.

SELECT 
  LENGTH('Hello world') - LENGTH(REPLACE('Hello world', ' ', '')) + 1 
AS word_count;
word_count: 2

PHP str_word_count function comments

En
Str word count Return information about words used in a string