in_array работает неправильно при работе со строками

Этот код:

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

вывод:

 bool(true) bool(false) 

Почему первая строка возвращает true ?

Это связано с принуждением типа PHP. «000» по существу преобразуется в 0 . Чтобы заставить его использовать строгую проверку типов, in_array() принимает третий параметр.

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

вывод:

 bool(false) 

EDIT: @andrekeller также указал, что ".00" вероятно, также преобразуется в int 0 . Мораль истории, не верьте PHP, чтобы получить типы правильно.