$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'])) {
}