2013-05-28 16 views
9

Ho un problema con la funzione in_array. Prova di seguito restituisce true:in_array restituisce true se l'ago è 0

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

Come è impossibile, come posso impedirlo?

Tuttavia

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

rendimenti false.

+1

(int) 0 (int) 'carta'? –

+4

LOOSE TYPING ... stai confrontando il numero con la stringa, quindi la stringa viene convertita in un numero, dando 0 in questo caso, e 0 == 0. Usa l'argomento STRICT opzionale –

+0

Grazie @MarkBaker – hsz

risposta

23

Lanciare qualsiasi stringa che non inizia con una cifra a un numero risulta in 0 in PHP. E questo è esattamente ciò che accade quando si confronta 0 con una stringa. Vedere lo PHP docs per i dettagli su come vengono effettuati i confronti tra vari tipi.

Utilizzare il terzo argomento (impostarlo su) di in_array per evitare il confronto di tipi non validi.

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

Va bene, questo è la risposta di cui ho bisogno. Grazie ! – hsz

0

Una risposta può essere colata 0 a stringa, quindi:

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

Tenete a mente che 0 può essere qualche variabile, in modo da fusione può essere utile.

7

quando si confronta in in_array stringa viene convertita in int, mentre il confronto dei tipi di dati incompatibili vuol dire cash o card viene convertito in 0

Questo è tutto a causa del tipo di colata

hai 2 opzioni

1. Tipo di colata

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

2 L'uso third parameter su in_array a true che corrispondono ai tipi di dati

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

see documentation

+0

OOPS !! un po 'tardi per rispondere ... – alwaysLearn

2

È possibile evitare che utilizzando il parametro 'severa':

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

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

restituisce falso in entrambi i casi.

Da 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. 
Problemi correlati