Php in_数组在应返回true时返回false
我有以下代码:Php in_数组在应返回true时返回false,php,arrays,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"); }
$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
我在这里看到了一些关于类似问题的主题,解决方案几乎总是在列表数组的元素上使用trim()函数。我试过了,但没什么改变
你能帮我意识到我做错了什么吗?我想你想检查
$words
是否在$list
中:
if(in_array($words[0], $list)) {
...
}
或定义$stopwords
:
$stopwords = $list;
似乎它只对第一行的单词不起作用
文本文件
这给了我一个想法:你的my-file.txt是utf8格式的吗
它可以保存为带有BOM的utf8,这是一个字节顺序标记,由在作为utf8查看时不显示为文本的字节组成,但如果它们与第一个实际单词之间没有空格字符,则将被解释为第一个单词的一部分。()(因此,不建议将BOM与utf8一起使用,但某些编辑器仍将其作为默认值)
如果是这种情况,尝试将文件保存为不带BOM的utf8(例如使用记事本++)
结论:
编码是一个b*tch,有时不仅需要查看显示的文本,但是要使用十六进制编辑器或类似工具来检查字符串是否不仅看起来相似,而且实际上是相同的字节序列什么是
停止字
?您能显示$stopwords
并且确实在其中吗?好的。.第五次:在if
语句之前,$stopwords
在哪里,试着打印$stopwords,看看里面是否有alors
。@PrimsFr:“它似乎只对文本文件第一行的单词不起作用”这给了我一个想法:你的my-file.txt是utf8格式的吗?然后,它可能被保存为utf8,带有BOM-一个字节顺序掩码,该掩码由未显示为文本的字节组成,但仍然是第一个单词的一部分,因为它们和第一个实际单词之间将没有“”。如果是这种情况,请尝试将文件保存为utf8而不包含BOM(例如,使用记事本++)。在此处复制代码时出错。我在代码中使用了正确的数组作为干草堆,所以问题并不源于此。很抱歉给您带来不便;)