我有以下PHP代码:
$haystack = file("dictionary.txt");
$needle = 'john';
$flipped_haystack = array_flip($haystack);
if (isset($flipped_haystack[$needle])) {
echo "Yes it's there!";
}
else {
echo "No, it's not there!";
}
dictionary.txt
的内容如下(UTF-8编码):
john
出于某种原因,尽管$haystack
打印出来没有任何问题,但我仍然会变得虚假。这是我不断得到的错误,它一直给我带来问题。或者,我尝试将$haystack
更改为以下代码,而这些代码又正确地返回为真:
$haystack = array("john");
为什么我的代码错误地返回false?
答案 0 :(得分:4)
这可能是因为每个元素末尾的换行符。试试这个:
$haystack = file("dictionary.txt", FILE_IGNORE_NEW_LINES);
以下是PHP Manual的说明:
Each line in the resulting array will include the line ending, unless FILE_IGNORE_NEW_LINES is used, so you still need to use rtrim() if you do not want the line ending present.
答案 1 :(得分:2)
问题依赖于file
:
返回数组中的文件。数组的每个元素对应于 文件中的一行,换行符仍然附加。
因此john
不等于john\n
。
只需设置以下标志:
file("dictionary.txt", FILE_IGNORE_NEW_LINES);
答案 2 :(得分:2)
file()
函数正在向数组元素添加换行符。
请参阅手册页:http://www.php.net/manual/en/function.file.php
以这种方式打开文件:
$haystack = file('dictionary.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
另外,为了帮助调试,您可以添加以下行:
var_dump($haystack);
var_dump($flipped_haystack);
哪个会告诉你这个:
array(1) {
[0] =>
string(5) "john\n"
}
array(1) {
'john
' =>
int(0)
}
No, it's not there!
答案 3 :(得分:1)
使用参数FILE_IGNORE_NEW_LINES
,因为可能会在数组中读取文件中的某些换行符
$ haystack = file(“dictionary.txt”,FILE_IGNORE_NEW_LINES);