当in_array返回true时返回false

时间:2013-07-26 13:37:58

标签: php arrays

我有以下代码:

$stopwords = file("/path/to/my-file.txt", FILE_IGNORE_NEW_LINES);
echo($stopwords[0]." - ");

$words = explode(" ", "alors on danse");
echo($words[0]." - ");

if (in_array($words[0], $stopwords)) {
    echo("yay");
} else {
    echo("nay");
}

当我期待alors - alors - nay时,我总是得到alors - alors - yay

我在这里看到了一些关于类似问题的主题,解决方案几乎总是在list数组的元素上使用trim()函数。我试过了,但它没有改变任何东西。

你能帮我理解我做错了吗?

2 个答案:

答案 0 :(得分:0)

我想您要检查$words中是否有$list

if(in_array($words[0], $list)) {
...
}

或定义$stopwords

$stopwords = $list;

答案 1 :(得分:0)

  

它似乎只适用于第一行的单词   文本文件

这给了我一个想法:你的myf file.txt在utf8中?

它可以保存为 utf8 with BOM - 一个字节顺序标记,由查看为utf8时未显示为文本的字节组成,但将被解释为第一个单词的一部分,如果它们与第一个真实单词之间没有空白字符。 (wiki entry)(因此,建议不要将BOM与utf8一起使用,但有些编辑仍将其作为默认设置)。

如果是这种情况,尝试将文件保存为utf8而不使用BOM (例如使用记事本++)

结论: 编码是一个b * tch,有时不仅需要查看显示的文本,还需要使用十六进制编辑器或类似工具来检查字符串是否看起来相似但字节序列是否相同