这有效
$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);
}
?>
fgets
只有一个参数将从提供的文件句柄中返回一行数据。
但是,它不会删除返回行中的尾随换行符(
"\n"
或任何使用的 EOL 字符)。
由于
common.txt
似乎每行一个单词,这就是为什么当你使用array_diff
时php找不到任何匹配元素的原因。
参数:长度
读取结束当读取长度 - 1 个字节时,换行符(包含在返回值中)或 EOF(以先到者为准)。如果未指定长度,它将继续从流中读取,直到到达行尾。
改写:
$common
的所有条目都会有一个尾随换行符,就像您现在所做的那样。如果您不打算处理
common.txt
中的条目,我建议您查看 php 的函数 file
,并将其与 array_map
一起使用到 rtrim
行。
$common = array_map ('rtrim', file ('common.txt')); // will do what you want
在 @MarkBaker 看到上面的解决方案后,他发表了评论说你不妨将一个标志传递给
file
以使其以相同的方式工作,无需调用 array_map 来“修复”返回的条目.
$common = file ('common.txt', FILE_IGNORE_NEW_LINES);