2016-08-03 11 views
-2

Bei der Entwicklung einer PHP-Anwendung stieß ich auf diese seltsame Eigenart.Warum ist "01" == "1", "000333" == "333", usw. wahr?

Offenbar ist die Zeichenfolge '01' == '1', '05' == '5', '03111' == '3111'. Ich habe versucht, diese -

php > $numbers = ["1", "2", "3", "4", "5"]; 
php > in_array("01", $numbers); 
true 
php > var_dump("01" == "1"); 
true 
php > var_dump("00003333" == "3333") 
true 

Wie verhindere ich dies (das heißt für die in_array Aufruf false zurück), und warum ist es in erster Linie geschieht?

+0

Verwendung 3 Gleichheitszeichen '' === – 123

+0

PHP-Handbuch einige Richtlinien hat auf Variablentypen und deren Auswirkung in Vergleichen. http://php.net/manual/en/language.operators.comparison.php –

+0

FYI: 'in_array()' macht einen lockeren Vergleich standardmäßig, so ist es im Grunde das gleiche wie '==' und dafür auch die Der gleiche Grund, warum es genauso funktioniert. Es ist auch die gleiche Lösung, um es mit '==' und 'in_array()' zu lösen, um nur den gleichen Vergleich zu verwenden. – Rizier123

Antwort

0

sollten Sie verwenden strengen Vergleich in in_array

in_array("01", $numbers, true); 

und === statt == dann php vergleiche auch Typen