2013-05-28 16 views
9

Mam problem z funkcją in_array. Test poniżej zwrotów true:in_array zwraca true, jeśli igła jest 0

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

Jak to jest możliwe, w jaki sposób można temu zapobiec?

Jednak

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

powraca false.

+1

(int) 0 w (int) 'karta'? –

+4

LICZBA TYPU ... porównujesz numer z łańcuchem, więc ciąg jest konwertowany na liczbę, podając 0 w tym przypadku i 0 == 0. Użyj opcjonalnego argumentu STRICT –

+0

Dziękuję @MarkBaker – hsz

Odpowiedz

23

Przesyłanie każdego ciągu, który nie zaczyna się od cyfry, powoduje, że w PHP występuje 0. I dokładnie tak się dzieje podczas porównywania 0 z jakimś ciągiem znaków. Zobacz PHP docs, aby uzyskać szczegółowe informacje na temat wykonywania porównań między różnymi typami.

Użyj trzeciego argumentu (ustaw go na true) z in_array, aby uniknąć luźnego porównania typów.

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

W porządku, to jest odpowiedź, której potrzebuję. Dziękuję Ci ! – hsz

0

Odpowiedź może być odlewania 0 ciąg, więc:

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

Należy pamiętać, że niektóre 0 może być zmienna, więc odlewanie może być pomocny.

7

jeśli porównać w in_array ciąg jest konwertowany na int porównując niezgodne typy danych Oznacza to cash lub card przekształca się 0

To wszystko z powodu typu odlewania

masz 2 opcje

1. Rodzaj odlewania

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

2 .Use third parameter na in_array do true który dopasuje typy danych

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

zobaczyć documentation

+0

OOPS !! trochę spóźniony, by odpowiedzieć ... – alwaysLearn

2

Można temu zapobiec stosując ścisłą '' parametr:

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

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

zwraca wartość false w obu przypadkach.

Od 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. 
Powiązane problemy