in_array вяртае ісціну, калі іголка 0

У мяне ёсць праблема з кодам <> in_array функцыі. Тэст ніжэй вяртае True :

in_array(0, array('card', 'cash'))

Як гэта немагчыма, як я магу прадухіліць гэта?

аднак

in_array(null, array('card', 'cash'))

вяртае False .

9
дзякуй @MarkBaker
дададзена аўтар hsz, крыніца
LOOSE TYPING ... вы параўноўваеце лік са радком, таму радок пераўтворыцца ў лік, даючы 0 ў гэтым выпадку, і 0 == 0. Выкарыстоўвайце неабавязковы аргумент STRICT
дададзена аўтар Mark Baker, крыніца
(INT) 0 на (цэлае) 'карта'?
дададзена аўтар Andrey Volk, крыніца

7 адказы

Кастынг любую радок, якая не пачынаецца з лічбы на шэраг вынікаў у 0 у PHP. І гэта менавіта тое, што адбываецца пры параўнанні 0 з некаторай радка. Паглядзець PHP дакументы Падрабязную інфармацыю аб тым, як параўнанне паміж рознымі тыпамі зробленыя.

Выкарыстоўвайце трэці аргумент (ўсталюйце яго ў True ) з in_array </а > каб пазбегнуць рыхлага параўнання тыпу.

in_array(0, array('card', 'cash'), true) === false

24
дададзена
Добра, што гэта адказ, што мне трэба. Дзякуй !
дададзена аўтар hsz, крыніца

when you compare in in_array string is converted to int while comparing incompatible data types it means cashor card is converted to 0

Гэта ўсё з-за прывядзенне тыпу

У вас ёсць 2 варыянты

1. прывядзенне тыпаў

in_array(string(0), array('card', 'cash'))) === false;

2 .Использование трэці параметр на in_array ў True , які будзе адпавядаць тыпы дадзеных

in_array(0, array('card', 'cash'), true) === false;

see documentation

7
дададзена
ОЙ !! трохі позна, каб адказаць на гэтае пытанне ..
дададзена аўтар alwaysLearn, крыніца

when you compare in in_array string is converted to int while comparing incompatible data types it means cashor card is converted to 0

Гэта ўсё з-за прывядзенне тыпу

У вас ёсць 2 варыянты

1. прывядзенне тыпаў

in_array(string(0), array('card', 'cash'))) === false;

2 .Использование трэці параметр на in_array ў True , які будзе адпавядаць тыпы дадзеных

in_array(0, array('card', 'cash'), true) === false;

see documentation

7
дададзена
ОЙ !! трохі позна, каб адказаць на гэтае пытанне ..
дададзена аўтар alwaysLearn, крыніца

Вы можаце прадухіліць гэта, выкарыстоўваючы «строгі» параметр:

var_export(in_array(0, array('card', 'cash'), true));

var_export(in_array(null, array('card', 'cash'), true));

вяртае хлусня ў абодвух выпадках.

From the docs to in_array()

If the third parameter strict is set to TRUE then the in_array()
function will also check the types of the needle in the haystack.
2
дададзена

Вы можаце прадухіліць гэта, выкарыстоўваючы «строгі» параметр:

var_export(in_array(0, array('card', 'cash'), true));

var_export(in_array(null, array('card', 'cash'), true));

вяртае хлусня ў абодвух выпадках.

From the docs to in_array()

If the third parameter strict is set to TRUE then the in_array()
function will also check the types of the needle in the haystack.
2
дададзена

Адказ можа быць ліццё 0 ў радку, так што:

in_array((string) 0, array('card', 'cash'))

Майце на ўвазе, што 0 можа быць якой-небудзь зменнай, так што адліўка можа быць карысным.

0
дададзена

Адказ можа быць ліццё 0 ў радку, так што:

in_array((string) 0, array('card', 'cash'))

Майце на ўвазе, што 0 можа быць якой-небудзь зменнай, так што адліўка можа быць карысным.

0
дададзена