1

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初心者を許してください、事前に感謝します。

4

2 に答える 2

2

理由file()

ファイルを配列で返します。配列の各要素はファイル内の行に対応し、改行はまだ添付されています

これを証明するには、次のことを試してください。

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

array_map()と を使用して、 の動作trim()修正できますfile()。または、代わりに と を使用file_get_contents()explode()ます。

于 2013-07-09T22:08:30.017 に答える
1

ドキュメントを引用するには:

配列の各要素はファイル内の行に対応し、改行はまだ添付されています。

つまり、検索を行っているときに、一致しない - を"Noah"含む配列を検索していることを意味します。"Noah\n"

これを修正するtrim()には、検索を行う前に配列の各要素に対して実行する必要があります。

次のように使用してそれを行うことができますarray_map()

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

file()また、関数は指定されたファイル名で直接動作し、ファイル ハンドルを必要としないことにも注意してください。つまり、orを使用する必要はありません。これら 2 行を完全に削除できます。fopen()fclose()

したがって、最終的なコードは次のようになります。

$usernameFileContent = array_map(file('passStuff/usernames.txt'), 'trim');
$inFileUsernameKey = array_search($username, $usernameFileContent);
于 2013-07-09T22:10:43.867 に答える