2013-07-09 143 views
1

我通過file()命令將文本文件的內容放入數組中。當我嘗試搜索特定值的數組時,它似乎沒有返回任何值,但是當我查看數組的內容時,我正在搜索的值在那裏。用於將文本轉換成數組php array_search不返回值

代碼:

$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

由於file()

返回數組該文件。數組的每個元素對應於文件中的行,用新行還連着

爲了證明這一點嘗試以下操作:

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

你可以使用array_map()trim()正確行爲的file()。或者,也可以使用file_get_contents()explode()

+0

謝謝。這工作完美。 –

1

引述the docs

該數組的每個元素對應於在文件中的線,與仍連接的換行符。

這意味着,當你做搜索,你在包含"Noah\n"陣列搜索"Noah" - 不匹配。

要解決這個問題,您應該在數組的每個元素上運行trim(),然後再執行搜索。

你可以做,使用array_map()這樣的:

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

也請注意,該file()功能直接作用於所提供的文件名,並且不需要的文件句柄。這意味着你要不要需要使用fopen()fclose() - 你可以完全刪除這兩行。

所以你的最終代碼看起來是這樣的:

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

感謝您指出fopen()fclose()的東西。 –

+0

如果您沒有指定嚴格模式,那麼即使針頭是「諾亞」,它是否不會返回「諾亞\ n」的鑰匙? – PhoenixNoor