Что не так с функцией PHP в array (...)? [дубликат]


На этот вопрос уже есть ответ здесь:

Функция PHP in_array(...) "проверяет, существует ли значение в массиве".

Но я наблюдаю очень странное поведение при обработке строк (PHP 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 4

1 ответ:

Если вы не зададите третий параметр in_array для истинного сравнения используется принуждение типа.

Если третий параметр strict имеет значение TRUE, то функция in_array () также будет проверять типы иголок в стоге сена.

При свободных правилах сравнения, фактически 'a' равно 0, так как (int)'a' == 0.