invalid argument supplied for foreach перевод

Разрабатывая свой код на PHP, программист может столкнуться с сообщением об ошибке « Invalid argument supplied for foreach in …». После данного сообщения обычно следует указание на её конкретику, к примеру, «/modules/tasks/todo_tasks_sub.php on line 121». Ошибка обычно обусловлена спецификой имеющегося отрезка кода, и требует проверки особенностей использования в нём переменных. Давайте разберём факторы появления ошибки, и как её можно исправить.

Содержание
  1. Как исправить ошибку «Invalid argument supplied for foreach in»
  2. Ошибка в WordPress
  3. Комментарии

Причины появления Invalid argument supplied for foreach

Рассматриваемая ошибка обычно возникает в ситуации, когда переменная, которую foreach пытается выполнить (повторить) не является массивом. К примеру, вы передаёте в цикл не массив, а скаляр, или вы задействуйте двойной массив, и забыли определить, как выбирается индекс.

Давайте допустим, что мы имеем функцию с именем get_user_posts. Эта функция должна возвращать массив комментариев пользователя. Однако если комментариев нет, функция возвращает логическое значение FALSE.

Пример отрезка кода

В приведенном выше отрезке кода мы предположили, что переменная $ posts всегда будет массивом. Однако, если функция get_user_posts возвращает логическое значение FALSE, то цикл foreach не будет работать, и PHP выведет следующее сообщение об ошибке:

Warning: Invalid argument supplied for foreach() on line 7

Как же решить указанную проблему? Давайте разбираться.

Как исправить ошибку «Invalid argument supplied for foreach in»

Решение зависит от того, для чего предназначен ваш код. То есть, если функция get_user_posts всегда должна возвращать массив, то, очевидно, вам необходимо выяснить, почему она возвращает логическое значение FALSE или значение NULL. Причиной этому может быть несколько вещей:

  • Не удалось объявить пустой массив «по умолчанию» (default);
  • Сбой запроса к базе данных;
  • Массив перезаписывается или сбрасывается. Это часто происходит в скриптах с большим количеством массивов, когда имеются ограничения памяти, а разработчик вынужден сбрасывать массивы, с которыми он или она закончили работу.

Просматривая чей-либо код, мы можем столкнуться с API и функциями, которые возвращают значение FALSE, когда результаты отсутствуют. Если это так, то вы можете добавить следующую проверку в ваш код:

Добавляем проверку в наш код

Выше мы используем функцию is_array, чтобы проверить, является ли $posts массивом. И это мы делаем ДО того, как пытаемся зациклить его с помощью конструкции foreach. Как мы уже писали, все зависит от того, каково предназначение вашего скрипта. Добавление проверки is_array неразумно в ситуации, когда есть вопросы о том будет ли переменная массивом. Ведь вы будете скрывать ошибку, которой не должно существовать.

Ошибка в WordPress

Также рассматриваемая ошибка «Invalid argument supplied for foreach in» может появляться при работе сайтов на WordPress. Проблема вызвана тем, что WP_Block_Parser выполняет несколько строковых манипуляций с substr () и strlen (), предполагая, что они работают с одиночными байтами, а не с многобайтовыми последовательностями.

Решить ошибку Invalid argument supplied for foreach в WordPress помогает изменение значения настройки mbstring.func_overload на 0 (обычно стоит 2). Сохраните произведённые изменения, и попытайтесь перейти на проблемную ранее страницу.

Если это не помогло, попробуйте скачать Вордпресс 4.9.5, вытянуть из него папку wp-includes , и скопировать в аналогичную папку на вашем хостинге. После этого WordPress может предложить обновить ваши базы данных, соглашайтесь, и всё заработает после очистки кэша.

Страница ask_names.php. Запрос имен элементов формы:

Страница task.php. Создание элементов формы:

Страница task_show1.php. Обработка формы, которая сгенерирована здесь — task.php:

Проблема в том, что обработка формы не проходит, потому что появляется ошибка Warning: Invalid argument supplied for foreach() в 4 строке страницы task_show1.php. Даже с помощью isset не проходит обработка, почему-то массив пустой становится. В чем может быть проблема? Как исправить ее?

Неожиданно появилась вот это:
«warning: Invalid argument supplied for foreach() in /home/vhosts/*****/httpdocs/includes/menu.inc on line 743.
»

вот где эта строка:

// Pull out just the menu items we are going to render so that we
// get an accurate count for the first/last classes.
foreach ($tree as $data) <
if (!$data[‘link’][‘hidden’]) <
$items[] = $data;
>
>

Что делать? гугление не помогло:(

p.s
решила проблему! вспомнила, какой модуль недавно ставила. проблема была в dhtml меню. удалила его и все стало в порядке!это конечно не лучший вариант, но оно мне все равно не нужно, как выяснилось:)
спасибо всем за помощь!

  • Drupal 6
  • Блог
  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

Комментарии

forum.listkom.ru — точно где нет

а вы вот так по пробуйте
httpdocs/includes/menu.inc on line 743

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

что-то смысл коммента не поняла

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

после чего это вылезло?

А что делали? Модуль писали или модуль поставили? Видимо $tree — не массив, ищите, где забыли array().

У меня такое бывает, когда забываю при разработке модулей, что ‘access arguments’ в элементах меню hook_menu() должен быть массивом. Только там другие функции menu.inc ругаются.

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

я ничего особо не делала. добавила термин таксономии, присвоила им родителя и связанный термин и это прежупреждение сразу появилось

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

верните все взад и смотрите пропала ошибка или нет.. потом таки проще отладчиком посмотреть откуда выплывает ошибка.
в вашем случае это неверный аргумент при вызове функции [ru-api=menu_tree_output] menu_tree_output [/ru-api]

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

2 -OC-drupal.org
возвращала все назад, конечно. не помогло:(
простите, а отладчиком это как? в друпале где-то или в консоли?

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

коммента не поняла

вы в поисковый запрос вставили строчку ошибки с вашим адресом, если его удалить из запроса и искать в гугле без вашего адреса, то вылетает описание ошибки на английском и итальянском языке — на первых 3 страницах поиска.

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

интернетом я пользоваться умею. написалав ведь, что гугление не помогло:( разве писала бы я сюда, если бы смогла справиться сама?

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

решила проблему! вспомнила, какой модуль недавно ставила. проблема была в dhtml меню. удалила его и все стало в порядке!это конечно не лучший вариант, но оно мне все равно не нужно, как выяснилось:)

решила проблему! вспомнила, какой модуль недавно ставила. проблема была в dhtml меню. удалила его и все стало в порядке!это конечно не лучший вариант, но оно мне все равно не нужно, как выяснилось:)

на орге по этому вопросу был патчик кстати.. поиском по вашей ошибке он как раз и находится

Подобная проблема начала вылазить после того как в одном из меню создал несколько родительських пунктов, которые являлись ссылками на страницы с таксономией — taxonomy/term/**

Нашел решение здесь: http://drupal.org/node/483920:
в файле modules/dhtml_menu/dhtml_menu.module надо заменить строчку

return isset($tree[$key]) ? $tree[$key][‘below’] : array();

  • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

moroz6600 , спасибо! именно то, что нужно было!

Оцените статью