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

时间:2011-05-27 21:44:37

标签: php drupal drupal-6

我正在使用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 |||| Array([0] => no [1] =>Zicam®冷补救鼻腔凝胶喷雾单孔执行器(“Jet”))|||| 1 || ||数组([0] =>否[1] =>是)

在我看来,它表示“1”不在数组中,当打印方式“1”清晰可见时。如果我用注释掉的检查替换现有的模块代码,则不会抛出任何错误。

1 个答案:

答案 0 :(得分:2)

您的代码不完整,我无法重现错误。

请允许我调整您的示例:

<?
$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也可以正常工作。它是某种有损类型转换,可以非常方便,但也很痛苦。通常你不知道发生了什么,并且导致错误。

但是仍然。我打赌你的变量类型有问题。

你应该抛弃它们,看看那里到底是什么。