2016-08-03 2 views
-2

При разработке приложения PHP я столкнулся с этой странной причудой.Почему «01» == «1», «000333» == «333» и т. Д. Истинно?

По-видимому, строка '01' == '1', '05' == '5', '03111' == '3111'. Я попытался это -

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 

Как предотвратить это (т.е. вернуть ложь для in_array вызова), и почему это происходит в первую очередь?

+0

использование 3 знака равно '' === – 123

+0

руководство PHP имеет некоторые рекомендации по переменным типам и их эффекту при сравнении. http://php.net/manual/en/language.operators.comparison.php –

+0

FYI: 'in_array()' делает слабое сравнение по умолчанию, поэтому оно в основном такое же, как '==', и для этого также по той же причине, почему он работает одинаково. Это также решение для решения проблемы с '==' и 'in_array()', чтобы просто использовать идентичное сравнение. – Rizier123

ответ

0

Вы должны использовать строгое сравнение в in_array

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

и === вместо == затем PHP сравнить также типы

Смежные вопросы