$arr = array(
    'test' => array(
        'soap' => true,
    ),
);

$input = 'hey';
if (in_array($input, $arr['test'])) {
    echo $input . ' is apparently in the array?';
}

结果:
嘿显然在数组中吗?

对我来说没有任何意义,请解释原因。以及我该如何解决?

最佳答案

那是因为type juggling导致了true == 'hey'。您正在寻找的是:

if (in_array($input, $arr['test'], true)) {

它强制基于===而不是==的相等性测试。
in_array('hey', array('soap' => true)); // true

in_array('hey', array('soap' => true), true); // false

为了更好地理解类型杂耍,可以使用以下方法:
var_dump(true == 'hey'); // true (because 'hey' evaluates to true)

var_dump(true === 'hey'); // false (because strings and booleans are different type)

更新

如果您想知道是否设置了数组键(而不是是否存在值),则应使用 isset() ,如下所示:
if (isset($arr['test'][$input])) {
    // array key $input is present in $arr['test']
    // i.e. $arr['test']['hey'] is present
}

更新2

还有 array_key_exists() 可以测试数组键的存在。但是,仅在相应的数组值可能为null的情况下才应使用它。
if (array_key_exists($input, $arr['test'])) {
}

09-28 12:36