Что не так с функцией PHP в array (...)? [дубликат]
На этот вопрос уже есть ответ здесь:
Функция PHP in_array(...) "проверяет, существует ли значение в массиве".
v7.0.3). Этот код
$needle = 'a';
$haystacks = [['a'], ['b'], [123], [0]];
foreach ($haystacks as $haystack) {
$needleIsInHaystack = in_array($needle, $haystack);
var_dump($needleIsInHaystack);
}
Генерирует следующее вывод:
bool(true)
bool(false)
bool(false)
bool(true) <- WHAT?
Функция возвращает true для каждого string $needle, Если $haystack содержит элемент со значением 0!
Действительно ли это задумано? Или это ошибка и о ней нужно сообщить?
1 ответ:
Если вы не зададите третий параметр
in_arrayдля истинного сравнения используется принуждение типа.Если третий параметр strict имеет значение TRUE, то функция in_array () также будет проверять типы иголок в стоге сена.
При свободных правилах сравнения, фактически
'a'равно0, так как(int)'a' == 0.