Задумал написать прогу, которая определяет сколько раз слово встречается в тексте. Знаю, что этого добра полно в сети, но это же искать надо, а вдруг там зараза какая прицеплена. Ну и своё-то – оно родное.
Алгоритм несложный, я бы сказал примитивный, но писать лень. В конце концов, заборол себя, сделал. Соорудил два массива: для слов и для их количеств. Можно как-то и одним обойтись, но я раньше с массивами в пхп вообще не работал. Чтобы сделать правильно – придется читать, экспериментировать. В результате, сделал как проще, ибо самая короткая дорога – это та, которую знаешь, да. По тексту в цикле ищу пробел, все, что до него – слово. Дальше нужно искать его в массиве слов. Если нашел – увеличиваю соответствующее значение в массиве количеств, не нашел – добавляю слово в массив слов и 1 в массив количеств. Потом выкидываю рассмотренное слово из текста и закрываю цикл.
Исправил баги – все заработало. Вывожу (опять же, в цикле) результаты. Приходит мысль отсортировать их по алфавиту и по частоте употребления. Причем сортировать придется два массива: сами слова и их количества. Тут мне стало совсем лень, начал искать готовые функции. Оказалось, что их предостаточно, во всех видах. Хошь – по индексу элемента сортируй, хошь – по значению. Хоть в прямом направлении, хоть в обратном. Лепота. К тому же, нашел функцию, которая массив распечатывает (никаких циклов не нужно). Попутно вспомнил, что в VB есть функция split, которая разбивает текст на элементы и создает массив. В пхп такая тоже нашлась. Ну и, в конце концов, обнаружил функцию, которая делает ровно то, что мне с самого начала было нужно: определяет частоту вхождения элемента в массив. Ну ё-маё, почувствовал себя ненужным. Все уже изобретено.
В итоге, вместо серии циклов и условий получилось 4 строки (параметры не указываю):
split
array_count_values
arsort
print_r
Что еще понравилось в пхп-массивах: индексом может быть все, что угодно, не обязательно порядковый номер элемента. Например, array_count_values выдает массив, где индекс – это слово, а значение – кол-во этих слов в тексте. Может быть, такое есть и в других языках, но я этим ни разу не пользовался.
|