http://sandbox.onlinephpfunctions.com/code/710e111f015bdbbd0067448533303c6926e7b10a
$a = in_array('test', [0] );
var_dump($a);
Что-то я не понял почему ответ true показывается?
Используйте строгий режим у функции in_array()
$a = in_array('test', [0], true);
var_dump($a);
Объяснение
Потому что в PHP слабая динамическая типизация. Когда вы ищете строку в массиве с числами, то интерпретатор делает приведение типов. В вашем случае строка test преобразуется к числу и будет равна 0.
Если вы попробуйте найти строку test в массиве, где нет числа 0, то будет false:
$a = in_array('test', [1] );
var_dump($a);
В PHP нужно всегда про это помнить и не использовать неявное преобразование, а использовать явное приведение типов и строгий режим сравнения.
var_dump('test' == 0); // true
var_dump('test' === 0); // false
var_dump('1test' == 1); // true
var_dump('1test' === 1); // false
В документации есть полезная таблица сравнений разных типом между собой – http://php.net/manual/ru/types.comparisons.php#types.comparisions-loose
Сборка персонального компьютера от Artline: умный выбор для современных пользователей