array_diff没有接收数组

时间:2011-12-20 14:42:49

标签: php arrays

这有效

$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);
}
?>

1 个答案:

答案 0 :(得分:3)

白色空间是邪恶的,有时......

只有一个参数的

fgets将从提供的文件句柄返回一行数据。

但是,它不会在返回的行中去除尾随的新行("\n"或使用的任何EOL字符)。

由于common.txt似乎每行有一个单词,这就是为什么php在你使用array_diff时找不到任何匹配元素的原因。

  

<强> PHP: fgets - Manual

     

参数:长度

     

读取结束长度 - 读取1个字节,<换行符号(包含在返回值中)上的或EOF(以先到者为准)。如果没有指定长度,它将继续从流中读取,直到它到达行尾。

<强>改写

  • $common关闭的所有条目都会以您现在的方式进行尾随换行。

替代解决方案1 ​​

如果您不打算处理common.txt中的条目,我建议您查看php的函数file,并将其与array_map结合使用rtrim 1}}为你排队。

$common = array_map ('rtrim', file ('common.txt')); // will do what you want

替代解决方案2

@MarkBaker看到上面的解决方案之后,他发表评论说你也可以将标志传递给file以使其以相同的方式工作,不需要将array_map调用到“修复“返回的条目。

$common = file ('common.txt', FILE_IGNORE_NEW_LINES);