当数组明显具有键时,array_key_exists返回false

问题描述

| 我正在使用drupal中的节点导入模块来进行一些内容导入。我的问题是我在看起来应该可以正常工作的数据上遇到错误。这是有争议的代码
if (count($allowed_values) && !array_key_exists($item[\'value\'],$allowed_values)) { //$allowed_values[$item[\'value\']] == NULL) {
  print \"||||\" . $item[\'value\'] . \"||||\";
  print_r($allowed_values);
这是打印内容的示例: |||| 1 |||||阵列([0] =>否[1] =>Zicam®鼻腔凝胶喷雾单孔执行器(“ Jet”))|||| 1 ||||阵列([ 0] =>否[1] =>是) 在我看来,这是说“ 1”不在数组中,当打印方式“ 1”清晰可见时。如果我用注释掉的检查替换现有的模块代码,则不会引发任何错误。     

解决方法

        您的代码不完整,我无法重现该错误。 请允许我调整您的示例:
<?
$item = array(\'value\' => 1);
$allowed_values = array(0 => \'no\',1 => \'yes\');

echo \"needle:\";
var_dump($item[\'value\']);
echo \"haystack:\";
var_dump($allowed_values);

if (count($allowed_values) && !array_key_exists($item[\'value\'],$allowed_values)) {
        echo \"needle hast not been found or haystack is empty\\n\";
} else {
        echo \"needle has been found\\n\";
}
提供所需的输出:
needle:int(1)
haystack:array(2) {
  [0]=>
  string(2) \"no\"
  [1]=>
  string(3) \"yes\"
}
needle has been found
当您为指针分配字符串而不是整数时,PHP也可以使用。这是一种有损类型转换,可以真正方便但又麻烦。通常,您不知道发生了什么,并且会导致错误。 但是还是。我敢打赌,您的变量类型有问题。 您应该将它们丢弃,然后看看里面到底有什么。