php. Как получить массив слов строки?

Здравствуйте. Не подскажете как из строки получить массив слов и количество вхождений?
  • Вопрос задан
  • 6752 просмотра
Пригласить эксперта
Ответы на вопрос 5
@ssbxlan
preg_split по знакам препинания
array_count_values
Ответ написан
Комментировать
Если по-простому, то можно как-то так.
$array = array_filter(explode(' ', $string)); 
$count_array = array_count_values($array); 
var_dump($count_array);
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Зачем так усложнять? Есть же стандартные функции на все большинство тривиальных задач.
str_word_count — Возвращает информацию о словах, входящих в строку
Ответ написан
Комментировать
@dsd_corp
  $str=file_get_contents('./words.txt');
  $aw=preg_split('/[\W]+/', $str);
  $wc=array_count_values($aw);
  file_put_contents('./words_out.txt', var_export(array($aw, $wc), true));

Содержимое words.txt
php. Как получить массив слов строки?
PHP*
Здравствуйте. Не подскажете как из строки получить массив слов и количество вхождений?
php


Содержимое words_out.txt после отработки
array (
  0 => 
  array (
    0 => 'php',
    1 => 'Как',
    2 => 'получить',
    3 => 'массив',
    4 => 'слов',
    5 => 'строки',
    6 => 'PHP',
    7 => 'Здравствуйте',
    8 => 'Не',
    9 => 'подскажете',
    10 => 'как',
    11 => 'из',
    12 => 'строки',
    13 => 'получить',
    14 => 'массив',
    15 => 'слов',
    16 => 'и',
    17 => 'количество',
    18 => 'вхождений',
    19 => 'php',
  ),
  1 => 
  array (
    'php' => 2,
    'Как' => 1,
    'получить' => 2,
    'массив' => 2,
    'слов' => 2,
    'строки' => 2,
    'PHP' => 1,
    'Здравствуйте' => 1,
    'Не' => 1,
    'подскажете' => 1,
    'как' => 1,
    'из' => 1,
    'и' => 1,
    'количество' => 1,
    'вхождений' => 1,
  ),
)

Ответ написан
Комментировать
@softm
Все примеры хороши, но не надо забывать про длину слова и стоп-лист

Вероятно надо еще
foreach ( $wc as $k=>$x) if (strlen($x)==1 || in_array($x,$stop_list))unset $wc[$k]

перед подсчетом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы