2015-02-10 8 views
10

Dieser Code handelt:in_array funktioniert nicht richtig, wenn sie mit Strings

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

Ausgang:

bool(true) 
bool(false) 

Warum wird die erste Zeile Rückkehr true?

+1

Könnte es etwas mit [diesem Verhalten] zu tun haben (http://php.net/manual/en/function.in-array.php#91911)? – summea

+1

Ich habe deinen Titel bearbeitet. Bitte denken Sie daran, dass "nicht funktioniert" eine vage Beschreibung eines Problems für andere Leute ist, die nach dem gleichen Problem suchen! – sjagr

Antwort

9

Es hat mit PHP-Typ-Zwang zu tun. Die "000" wird im Wesentlichen nur in 0 konvertiert. Um eine strenge Typprüfung zu erzwingen, akzeptiert einen dritten Parameter.

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

Ausgang:

bool(false) 

EDIT: @andrekeller wies auch wahrscheinlich die ".00" aus int 0 auch umgewandelt wird. Moral der Geschichte, vertraue PHP nicht, um Typen richtig zu machen.

+0

Beat mich dazu, +1 – sjagr

+0

Ich hätte etwas ähnliches geschrieben, +1 – davidkonrad

+0

zugestimmt, löschte meine ähnliche Antwort –

Verwandte Themen