2015-02-10 16 views
10

questo codice:in_array non funziona correttamente quando si tratta di stringhe

var_dump(in_array("000", array(",00", ".00"))); 
var_dump(in_array("111", array(",11", ".11"))); 

uscita:

bool(true) 
bool(false) 

Perché il primo ritorno linea di true?

+1

Potrebbe avere qualcosa a che fare con [questo comportamento] (http://php.net/manual/en/function.in-array.php#91911)? – summea

+1

Ho modificato il tuo titolo. Per favore ricorda che "non funziona" è una vaga descrizione di un problema per le altre persone che cercano lo stesso problema! – sjagr

risposta

9

Ha a che fare con la coercizione di tipo PHP. Lo "000" viene essenzialmente convertito in solo 0. Per forzare l'utilizzo del controllo di tipo rigoroso, in_array() accetta un terzo parametro.

var_dump(in_array("000", array(",00", ".00"), true)); 

uscita:

bool(false) 

EDIT: @andrekeller anche sottolineato il ".00" probabilmente viene convertito in int 0 pure. Morale della trama, non fidarti di PHP per ottenere i tipi giusti.

+0

Mi picchia, +1 – sjagr

+0

Avrei scritto qualcosa di simile, +1 – davidkonrad

+0

concordato, cancellato la mia risposta simile –

Problemi correlati