2012-10-05 51 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

相關問題