php array_search没有返回值

时间:2013-07-09 22:06:52

标签: php

我通过file()命令将文本文件的内容放入数组中。当我尝试在数组中搜索特定值时,它似乎没有返回任何值,但是当我查看数组的内容时,我正在搜索的值就在那里。

用于将文本放入数组的代码:

    $usernameFileHandle = fopen("passStuff/usernames.txt", "r+");
    $usernameFileContent = file("passStuff/usernames.txt");
    fclose($usernameFileHandle);

搜索数组的代码

$inFileUsernameKey = array_search($username, $usernameFileContent);

Usernames.txt包含

Noah
Bob
Admin

$ usernameFileContent数组也是如此。为什么array_search不起作用,有没有更好的方法来做到这一点。请原谅我的PHP noob-ness,提前谢谢。

2 个答案:

答案 0 :(得分:2)

因为file()

  

返回数组中的文件。数组的每个元素对应于文件中的一行,换行符仍然附加

要证明这一点,请尝试以下方法:

var_dump(array_search('Bob
', $usernameFileContent));

您可以使用array_map()trim() 更正 file()的行为。或者,也可以使用file_get_contents()explode()

答案 1 :(得分:1)

引用the docs

  

数组的每个元素对应于文件中的一行,换行符仍然附加。

这意味着当您进行搜索时,您正在搜索包含"Noah"的数组中的"Noah\n" - 它与之匹配。

要解决此问题,您应该在搜索之前对阵列的每个元素运行trim()

你可以使用array_map()这样做:

$usernameFileContent = array_map($usernameFileContent, 'trim');

另请注意,file()函数直接对提供的文件名进行操作,并且不需要文件句柄。这意味着您需要使用fopen()fclose() - 您可以完全删除这两行。

所以你的最终代码可能如下所示:

$usernameFileContent = array_map(file('passStuff/usernames.txt'), 'trim');
$inFileUsernameKey = array_search($username, $usernameFileContent);