in_array () çalışmıyor

4 Cevap php

Benim kod:

<?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";
}
?>

Dizinin ilk birkaç satır (i print_r ($ dizi) ... kullanılı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

4 Cevap

Dosya, Windows linebreaks kullanıyorsa, sizin dizeleri her ucunda görünmez bir \r karakteri alırsınız (çizgiler \r\n biter). Bunlardan biri strlen () çalıştırarak bunun için bir test:

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

Gibi bir şey alırsanız

12345: 6 chars

Bunun sorun olduğunu biliyorum! Sen kullanarak diziyi patlayan sonra bu karakterlerin kurtulmak array_map() with trim() alabilirsiniz:

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

İşte o çalıştı ile geldi budur:

<?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";    
}

?>

sen de bu konuda trim kullanmak isteyebilirsiniz. Eğer gözle göremiyoruz görünmez karakter olabilir.

31 - $ 0 değerini geçmektedir?