2015-02-10 12 views
10

ten kod:in_array nie działa prawidłowo, gdy do czynienia z ciągów

var_dump(in_array("000", array(",00", ".00"))); 
var_dump(in_array("111", array(",11", ".11"))); 

wyjściowa:

bool(true) 
bool(false) 

Dlaczego pierwsza linia true powrotny?

+1

Czy to może mieć coś wspólnego z [tym zachowaniem] (http://php.net/manual/en/function.in-array.php#91911)? – summea

+1

Zmieniłem twój tytuł. Pamiętaj, że "nie działa" to niewyraźny opis problemu dla innych osób szukających tego samego problemu! – sjagr

Odpowiedz

9

Ma to związek z przymusem typu PHP. Wartość "000" zasadniczo zmienia się na wartość tylko 0. Aby wymusić ścisłe sprawdzanie typu, in_array() akceptuje trzeci parametr.

var_dump(in_array("000", array(",00", ".00"), true)); 

wyjściowa:

bool(false) 

EDIT: @andrekeller zwrócił również uwagę na ".00" prawdopodobnie zostanie przekonwertowany na int 0 również. Morał z tej historii, nie ufaj PHP, aby uzyskać odpowiednie typy.

+0

Zadzwoń do mnie, +1 – sjagr

+0

Napisałbym coś podobnego, +1 – davidkonrad

+0

zgodził się, usunąłem moją podobną odpowiedź –

Powiązane problemy