我通过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,提前谢谢。
答案 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);