找不到PHP哈希密钥:预期的行为是什么?

时间:2011-11-28 15:02:34

标签: php hashtable lookup

如果您尝试访问不存在的哈希中的密钥,我听说您会收到错误。

但是,我似乎只得到一个空字符串或空值。

示例:

<?php

$hash = array("abc" => 123,
              "def" => 456
);

echo "a key that's in the hash: <" . $hash["abc"] . "><br />";

echo "a key that's not in the hash: <" . $hash["ghi"] . ">";

?>

输出结果为:

a key that's in the hash: <123>
a key that's not in the hash: <>

这里发生了什么?

我使用PHP v5.3.8。

3 个答案:

答案 0 :(得分:4)

您可能隐藏了通知错误(更多信息here)。 把它放在脚本的顶部:

error_reporting(E_ALL);
ini_set('display_errors', true);

答案 1 :(得分:1)

正如Wesley van Opdorp所说,您当前的错误报告设置可能会隐藏通知错误。

您可以使用此代码段(位于脚本顶部)启用所有错误:

error_reporting(E_ALL);
ini_set('display_errors', true);

无论如何,我建议您通过isset()检查某个密钥是否存在:

if ( isset($array['key']) )
{
  /* exists */
}
else
{
  /* doesn't exist */
}

答案 2 :(得分:0)

取决于 error_reporting 设置。 如果设置error_reporting = E_ALL

,您将收到未定义的偏移
>php -d error_reporting='E_ALL' -r '$a=array(); print $a["b"];'
PHP Notice:  Use of undefined constant b - assumed 'b' in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
....