1

I am putting the contents of an text file into an array via the file() command. When I try and search the array for a specific value it does not seem to return any value but when I look at the contents of the array the value I am searching for is there.

Code used for putting text into array:

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

Code for searching the array

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

Usernames.txt contains

Noah
Bob
Admin

And so does the $usernameFileContent Array. Why is array_search not working and is there a better way to do this. Please excuse my PHP noob-ness, thanks in advance.

4

2 回答 2

2

因为file()

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

为了证明这一点,请尝试以下操作:

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

您可以使用array_map()andtrim()纠正. file()或者,或者,使用file_get_contents()and explode()

于 2013-07-09T22:08:30.017 回答
1

引用文档

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

这意味着当您进行搜索时,您正在搜索包含- 不匹配"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);
于 2013-07-09T22:10:43.867 回答