Intereting Posts

Предупреждение: array_key_exists () ожидает, что параметр 2 будет массивом, boolean given

У меня есть ревущий фрагмент кода, который проверяет, что данный ключ существует в массиве. Но при выполнении этого кода я получаю ошибку «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