这有效
$arr = array_merge(array_diff($words, array("the","an"));
为什么这不起作用?
$ common由数组中的40个单词组成。
$arr = array_merge(array_diff($words, $common));
还有其他解决办法吗?
供参考:
<?php
error_reporting(0);
$str1= "the engine has two ways to run: batch or conversational. In batch, expert system has all the necessary data to process from the beginning";
common_words($str1);
function common_words(&$string) {
$file = fopen("common.txt", "r") or exit("Unable to open file!");
$common = array();
while(!feof($file)) {
array_push($common,fgets($file));
}
fclose($file);
$words = explode(" ",$string);
$arr = array_merge(array_diff($words, array("the","an")));
print_r($arr);
}
?>
答案 0 :(得分:3)
fgets
将从提供的文件句柄返回一行数据。
但是,它不会在返回的行中去除尾随的新行("\n"
或使用的任何EOL字符)。
由于common.txt
似乎每行有一个单词,这就是为什么php在你使用array_diff
时找不到任何匹配元素的原因。
<强> PHP: fgets - Manual 强>
参数:长度
读取结束长度 - 读取1个字节,<换行符号(包含在返回值中)上的或EOF(以先到者为准)。如果没有指定长度,它将继续从流中读取,直到它到达行尾。
<强>改写强>:
$common
关闭的所有条目都会以您现在的方式进行尾随换行。如果您不打算处理common.txt
中的条目,我建议您查看php的函数file
,并将其与array_map
结合使用rtrim
1}}为你排队。
$common = array_map ('rtrim', file ('common.txt')); // will do what you want
在@MarkBaker看到上面的解决方案之后,他发表评论说你也可以将标志传递给file
以使其以相同的方式工作,不需要将array_map调用到“修复“返回的条目。
$common = file ('common.txt', FILE_IGNORE_NEW_LINES);