2012-10-05 57 views
-2

我有下面的一段代码,它检查给定的键存在于数组中。但是,当执行此代码时,我收到错误“警告:array_key_exists()期望参数2是数组,布尔给定”。我是新来的PHP,不知道是什么原因导致这个错误。请帮帮我。警告:array_key_exists()期望参数2是数组,布尔给定

$structure = imap_fetchstructure($connection, $id, FT_UID); 

     if (array_key_exists('parts', $structure)) 
     { 
}; 
+0

第二个参数应该是数组。 http://php.net/manual/en/function.array-key-exists.php.here你的函数不返回数组 –

+2

'$ strucuture'不包含你认为它的作用。或者你期望它。 –

+2

不是一个真正的问题。错误消息明确指出什么是错误的,所以确保你的$结构是一个数组。 – Gordon

回答

8

为了防止有人传递一个布尔值或空入功能,您可以添加一个简单的检查,看看是否$structure是使用它之前的数组:

if (is_array($structure) && array_key_exists('parts', $structure)) 
    { 
     //...magic stuff here 
    } 

简单的答案,“为什么”你原来的代码被破坏的原因是imap_fetchstructure()未找到请求的消息并返回false,null0。文档http://php.net/manual/en/function.imap-fetchstructure.php未指出失败时返回的内容,但很容易猜到。大多数返回对象但无法完成的php函数在失败时返回null或false(当我说失败时,我不是指错误或异常,只是无法完成或找不到任何问题)。

+0

这可能是构建库的方式,但在这种情况下,知道*为什么它不是数组/对象更重要。 –

+0

@Jack,看到我的补充回答 – Ray

+0

Thankx。我认为这个工作。 – ashajf

1

我猜imap_fetchstructure()时返回false,这意味着函数无法完成所需的任务。要进行调试,请参阅print_r($structure);输出。

+0

从我所知道的,[imap_fetchstructure](http://php.net/manual/en/function.imap-fetchstructure.php)返回一个对象,我不知道没有看到引用中的任何内容,表示它在失败时返回FALSE。我不熟悉它,虽然... –

+0

我也检查了文档,但仍然清楚PHP是告诉'$结构'的内容不是一个数组。所以'假'最有可能的结果。 – Ben

相关问题