3

指定されたキーが配列に存在することを確認する以下のコードがあります。しかし、このコードを実行すると、次のエラーが発生します。

「警告:array_key_exists()は、パラメーター2が配列であり、ブール値が指定されていることを想定しています」。私はPHPを初めて使用しますが、このエラーの原因がわかりません。

コード

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

if (array_key_exists('parts', $structure))
{

};
4

3 に答える 3

24

誰かがブール値または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を返します(失敗と言った場合、エラーや例外を意味するのではなく、要求されたものを実行または見つけることができませんでした)。

于 2012-10-05T13:21:35.597 に答える
2

falseを返しているとimap_fetchstructure()思います。つまり、関数は目的のタスクを完了できません。デバッグするには、print_r($structure);出力内容を確認してください。

于 2012-10-05T13:17:57.793 に答える
1

PHPのドキュメントには、オブジェクトが返されると記載されていますが、PHPのソースコードを表示すると、失敗すると実際にはFALSEが返され、すべてが成功した場合にのみオブジェクトが返されます。

https://github.com/php/php-src/blob/master/ext/imap/php_imap.c#L2280

于 2012-10-05T13:26:23.723 に答える