У меня есть ревущий фрагмент кода, который проверяет, что данный ключ существует в массиве. Но при выполнении этого кода я получаю ошибку «Warning: array_key_exists () ожидает, что параметр 2 будет массивом, boolean given». Я новичок в php и не знаю, что вызывает эту ошибку. Пожалуйста, помогите мне.
$structure = imap_fetchstructure($connection, $id, FT_UID); if (array_key_exists('parts', $structure)) { };
Чтобы защитить от того, что кто-то передал логическую или нулевую функцию, вы можете добавить простую проверку, чтобы увидеть, является ли $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 при отказе (когда я говорю об отказе, я не имею в виду ошибку или исключение, просто не мог сделать или найти то, что вы просили об этом).
Я предполагаю, что imap_fetchstructure()
возвращает false, то есть функция не выполняет желаемую задачу. Чтобы отладить, посмотрите, что print_r($structure);
выходы.
В документации по PHP говорится, что она вернет объект, однако если вы посмотрите исходный код PHP, вы увидите, что он фактически возвращает FALSE при сбое и возвращает объект только в том случае, если все будет успешным.
https://github.com/php/php-src/blob/master/ext/imap/php_imap.c#L2280