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

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

结果:嘿显然在数组中?

这对我来说没有任何意义,请解释原因。我该如何解决这个问题?

4

2 回答 2

11

那是因为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'])) {
}
于 2012-12-16T12:35:56.260 回答
2

您将数组用作字典,但是in_array当您像数组一样使用它时要使用该函数。检查文档

于 2012-12-16T12:35:43.083 回答