我原来的测试实现包括使用以下代码构建一个“忽略单词”数组:
$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是一个纯文本文件,每个项目都在其自己的行上,没有空格。导入和爆炸似乎正在起作用,因为$ ignoreList上的print_r语句导致:
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 )
然而,比较代码停止正常工作,忽略列表中的单词再次显示在我的最终结果中。任何想法有什么不对?
答案 0 :(得分:1)
您的ignore.txt文件可能有\r\n
行结尾,而您的字实际上有一个尾随\r
。
试试:
$ignoreList = array_map('trim', file("includes/ignore.txt"));
BTW您的代码可能会被重构:
$words = array_diff($words, $ignoreList); // removes ignored words
$words = array_count_values($words); // count words