数组文件isset错误地返回False

时间:2013-03-17 04:40:57

标签: php arrays isset

我有以下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?

4 个答案:

答案 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);

http://php.net/manual/en/function.file.php