Недавно обнаружил, что в моем скрипте функция in_array() выдает неверное на первый взгляд значение. Т.е. в параметрах ее задаю явно не существующий элемент массива, а она упорно возвращала значение TRUE, мол значение это есть в массиве. Оказалось все просто. В массиве по которому ведется проверка есть элемент 0, а значение которое проверялось на присутствие в массиве — строка, которая при приведении типа приводилась к 0.
$array = array('one', 'two', 0);
var_dump(in_array('three', $array));
Для того чтобы in_array() еще производила проверку типа, нужно третьим параметром передать ей TRUE.
var_dump(in_array('three', $array, TRUE));
Все таки документация, вещь полезная и нужная.
Не знал ранее про такое. Но чувствую, что потенциальная ошибка может возникнуть также в своем коде. Странно что по умолчанию параметр третий не в 1 стоит и такая ошибка имеет место действительно быть.