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

Этот код:

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

выход:

bool(true)
bool(false)

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

Ответ 1

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

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

выход:

bool(false)

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