in_array() всегда возвращает true, если в массиве одно из значений $haystack равно нулю и $needle это строка:
$array = array(0, 'one', 'two');
var_dump(in_array('three', $array)); // bool(true)
Чтобы этого не происходило, нужно параметр $strict установить в true:
var_dump(in_array('three', $array, true)); // bool(false)Написанное актуально для
PHP 5.2.x
Комментарии
добавлю объяснение: в нестрогом режиме то, что ищется приводится к типу текущего элемента массива.
in_array('test', array( 0 ));
Когда мы находимся на элементе 0 то наша переменная "test" приводится к типу int
(int)"test" = 0
то есть 0 == 0
var_dump( in_array('test', array( 0 ) ) ); // bool(true)
В строгом режиме где $strict = true, приведения типа не происходит
"test" !== 0
var_dump( in_array('test', array( 0 ), true) ); // bool(false)
Добавить комментарий