Массив наиболее часто встречающихся слов в файле, разделенных символами новой строки. - PullRequest
1 голос
/ 29 июля 2011

Как я могу получить массив самых популярных слов из файла, разделенных символами новой строки (\ n)?

Файл примера:

person
person
dog
cat
person
lemon
orange
person
cat
dog
dog

Слова в файле расположены в произвольном порядке.

Как бы я заставил его вести себя следующим образом?

echo $ top [0]; // вывод: персона
echo $ top [1]; // вывод: собака
и т.д ...

Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 29 июля 2011
$lines = file("theFile.txt");
var_dump(array_count_values($lines));

http://php.net/array_count_values

Демонстрация: http://ideone.com/zd82W

Чтобы получить первый элемент (слово, которое встречается чаще всего) из полученного массива, вы можете сделать это:

$arr = array("person", "person", "cat", "dog", "cat");
$newArr = array_count_values($arr);
echo key($newArr); // "person"

Демо: http://ideone.com/A0WPa

0 голосов
/ 29 июля 2011

Я бы, вероятно, использовал что-то вроде этого:

  • читать файл построчно, добавляя +1 к элементу массива каждый раз, когда слово обнаруживается, подсчитывая для каждого слова, сколько раз оно быловидел
  • сортировка этого массива.


Не проверено, но что-то вроде этого должно работать, я полагаю:
(должно работать лучше, чем array_count_values() если ваш файл большой: нет необходимости загружать весь файл в память)

$words = array();

$f = fopen('your_file', 'r');
while ($line = fgets($f)) {
    $word = trim($line);
    if (isset($words[$words])) {
        $words[$words]++;
    }
    else {
        $words[$words] = 1;
    }
}

asort($words);

Теперь наиболее часто используется первый ключ в массиве $wordsслово - и соответствующее значение - это количество раз, которое оно было просмотрено в вашем файле.

...