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)
Добавить комментарий