Что не так с функцией 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
.