Импортированный, разобранный список слов не сравнивается должным образом - PullRequest
0 голосов
/ 15 августа 2011

Моя первоначальная реализация теста состояла из построения массива "игнорируемых слов" со следующим кодом:

$ignoreList = array("test1", "test2", "test3");

Позже я проверяю отдельные слова в $ ignoreList:

if(in_array($word, $ignoreList)){
    } else{
    $words[$word] = $words[$word] + 1;
}

Этот код работает отлично - при повторении моего списка слов в слове $ ignoreList не отображаются никакие слова. Я сделал рефакторинг, чтобы было легче добавлять или удалять слова:

//Import ignore list
$ignore_raw = file_get_contents("includes/ignore.txt");
$ignoreList = explode("\n", $ignore_raw);

ignore.txt - это простой текстовый файл с каждым элементом в отдельной строке, без пробелов. Кажется, что работает import и explode, потому что оператор print_r для $ ignoreList приводит к:

Array ( [0] => a [1] => and [2] => are [3] => as [4] => for [5] => in [6] => is [7] => more [8] => of [9] => than [10] => that [11] => the [12] => to [13] => with )

Код сравнения, однако, перестает работать должным образом, и слова из списка игнорирования снова появляются в моих окончательных результатах. Есть идеи что не так?

1 Ответ

1 голос
/ 15 августа 2011

Ваш файл ignore.txt может иметь \r\n окончания строки, а ваши слова на самом деле имеют конечный \r.

Попробуйте это:

$ignoreList = array_map('trim', file("includes/ignore.txt"));

Кстати, ваш код может быть изменен следующим образом:

$words = array_diff($words, $ignoreList); // removes ignored words
$words = array_count_values($words); // count words
...