我有一段代码,用于检查数组中存在的给定键。但是当执行这段代码时,我收到错误“警告:array_key_exists()期望参数2是数组,给定布尔值”。我是php新手,不知道导致此错误的原因。请帮我。
$structure = imap_fetchstructure($connection, $id, FT_UID);
if (array_key_exists('parts', $structure))
{
};
答案 0 :(得分:13)
为防止有人将boolean或null传递给函数,您可以在使用之前添加一个简单的检查以查看$structure
是否为数组:
if (is_array($structure) && array_key_exists('parts', $structure))
{
//...magic stuff here
}
原始代码“原因”的简单答案是imap_fetchstructure()没有找到请求的消息,而是返回false
,null
或0
。文档http://php.net/manual/en/function.imap-fetchstructure.php并未指出失败时返回的内容,但很容易猜到。大多数返回对象但无法完成的php函数在失败时返回null或false(当我说失败时我不是指错误或异常,只是无法做或找不到你提出的任何问题)。
答案 1 :(得分:1)
我猜imap_fetchstructure()
正在返回false,这意味着该函数无法完成您想要的任务。要进行调试,请查看print_r($structure);
输出内容。
答案 2 :(得分:1)
PHP文档说它将返回一个对象,但是如果你查看PHP源代码,你会看到它实际上在失败时返回FALSE,并且只有在一切都成功时才返回一个对象。
https://github.com/php/php-src/blob/master/ext/imap/php_imap.c#L2280