2009-11-14 83 views
5

我的代碼:數組的in_array()不工作

<?php 

$pass = "12345"; 

//checkPass($pass, $user, $length); 
$file = file_get_contents("common.txt"); 
$array = explode("\n", $file); 
if(in_array($pass, $array) == true) { 
echo "it's in the array"; 
} 
?> 

前幾行(我用的print_r($陣列)...):

 
Array ([0] => 12345 [1] => abc123 [2] => password [3] => computer [4] => 123456 
[5] => tigger [6] => 1234 [7] => a1b2c3 [8] => qwerty [9] => 123 [10] => xxx 
[11] => money [12] => test [13] => carmen [14] => mickey [15] => secret 
[16] => summer [17] => internet [18] => service [19] => canada [20] => hello 
[21] => ranger [22] => shadow [23] => baseball [24] => donald [25] => harley 
[26] => hockey [27] => letmein [28] => maggie [29] => mike [30] => mustang 
[31] => snoopy 
+1

你能後,您可以設置$傳遞等於它的價值的時候:你可以使用爆炸與array_map()trim()後陣擺脫這些字符? –

+0

它位於文件的頂部,緊跟在開始的PHP標記之後。我試着在上面編輯它,但有些東西不能正常工作。 – Andrew

回答

24

如果您的文件使用Windows換行符(行結尾爲\r\n),則會在每個字符串的末尾看到隱藏的\r字符。測試它通過對他們中的一個運行的strlen():

echo $array[0] . ': ' . strlen($array[0]) . ' chars'; 

如果你喜歡的東西

12345: 6 chars 

你知道這就是問題所在!

$array = array_map('trim', $array); 
+0

謝謝:D一直在尋找這個。 – Peibol

+0

謝謝@Jeremy,那是我in_array失敗的地方。 – CommentLuv

1

是$傳遞的價值0 - 31?

+0

$ pass =「12345」; – Andrew

2

這裏是我想出了工作:

<?php 

$file = file_get_contents("common.txt"); 

$array = explode("\n", $file); 

$pass = "snoopy"; 

if(in_array($pass, $array) == true) {  
    echo "it's in the array";  
}else {  
    echo "it's not";  
} 

?> 
2

你可能要使用上trim了。可能是你看不到眼睛的隱形字符。