Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php in_数组在应返回true时返回false_Php_Arrays - Fatal编程技术网

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(例如,使用记事本++)。在此处复制代码时出错。我在代码中使用了正确的数组作为干草堆,所以问题并不源于此。很抱歉给您带来不便;)