php foreach warning invalid argument supplied for foreach
Invalid argument supplied for foreach in ошибка
Разрабатывая свой код на PHP, программист может столкнуться с сообщением об ошибке « Invalid argument supplied for foreach in …». После данного сообщения обычно следует указание на её конкретику, к примеру, «/modules/tasks/todo_tasks_sub.php on line 121». Ошибка обычно обусловлена спецификой имеющегося отрезка кода, и требует проверки особенностей использования в нём переменных. Давайте разберём факторы появления ошибки, и как её можно исправить.
Причины появления Invalid argument supplied for foreach
Рассматриваемая ошибка обычно возникает в ситуации, когда переменная, которую foreach пытается выполнить (повторить) не является массивом. К примеру, вы передаёте в цикл не массив, а скаляр, или вы задействуйте двойной массив, и забыли определить, как выбирается индекс.
Давайте допустим, что мы имеем функцию с именем get_user_posts. Эта функция должна возвращать массив комментариев пользователя. Однако если комментариев нет, функция возвращает логическое значение FALSE.
Warning: Invalid argument supplied for foreach() on line 7
Как же решить указанную проблему? Давайте разбираться.
Как исправить ошибку «Invalid argument supplied for foreach in»
Решение зависит от того, для чего предназначен ваш код. То есть, если функция get_user_posts всегда должна возвращать массив, то, очевидно, вам необходимо выяснить, почему она возвращает логическое значение FALSE или значение NULL. Причиной этому может быть несколько вещей:
Просматривая чей-либо код, мы можем столкнуться с API и функциями, которые возвращают значение FALSE, когда результаты отсутствуют. Если это так, то вы можете добавить следующую проверку в ваш код:
Ошибка в WordPress
Также рассматриваемая ошибка может появляться при работе сайтов на WordPress. Проблема вызвана тем, что WP_Block_Parser выполняет несколько строковых манипуляций с substr () и strlen (), предполагая, что они работают с одиночными байтами, а не с многобайтовыми последовательностями.
Решить ошибку Invalid argument supplied for foreach в WordPress помогает изменение значения настройки mbstring.func_overload на 0 (обычно стоит 2). Сохраните произведённые изменения, и попытайтесь перейти на проблемную ранее страницу.
Invalid argument supplied for foreach()
It often happens to me to handle data that can be either an array or a null variable and to feed some foreach with these data.
When you feed a foreach with data that are not an array, you get a warning:
Warning: Invalid argument supplied for foreach() in [. ]
Assuming it’s not possible to refactor the get_values() function to always return an array (backward compatibility, not available source code, whatever other reason), I’m wondering which is the cleanest and most efficient way to avoid these warnings:
19 Answers 19
The reason for my preference is it doesn’t allocate an empty array when you’ve got nothing to begin with anyway.
How about this one? lot cleaner and all in single line.
I usually use a construct similar to this:
Note that this particular version is not tested, its typed directly into SO from memory.
Edit: added Traversable check
Please do not depend on casting as a solution, even though others are suggesting this as a valid option to prevent an error, it might cause another one.
Be aware: If you expect a specific form of array to be returned, this might fail you. More checks are required for that.
Always test your input before using it in foreach. Suggestions:
JSON Invalid argument supplied for foreach()
I have some issue to retrieve data from JSON, it always said Invalid argument supplied for foreach(), this is the JSON in the url.php :
and this is my code :
5 Answers 5
You need to explicitly turn json_decode output to an array. Like this:
I had exactly same issue like yours and this resolved my issue.
Since your JSON is valid, next step is to check for PHP error in decoding.
First try this code to check error while decoding JSON:
Once you know the error you can search for more precise error from CONSTANT in case. Most like its ‘JSON_ERROR_UTF8’.
i was have this error too, and i have solved it using this:
so, your code should be like this:
Just remove the true in the json_decode() like this:
And take a quote from there:
assoc When TRUE, returned objects will be converted into associative arrays.
Please take a look at the assoc flag that you are setting to true when you call json_decode : http://php.net/manual/en/function.json-decode.php
it should work fine using the below code:
Not the answer you’re looking for? Browse other questions tagged php arrays json or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.17.40238
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Неверный аргумент поставляются для foreach()
мне часто случается обрабатывать данные, которые могут быть либо массивом, либо нулевой переменной, и кормить некоторые foreach С этими данными.
когда вы кормите foreach с данными, которые не являются массивом, вы получаете предупреждение:
предупреждение: неверный аргумент поставляются для foreach() в [. ]
предполагая, что это не возможно, чтобы рефакторинг get_values() функция, чтобы всегда возвращать массив (обратная совместимость, недоступный исходный код, независимо от других причин), мне интересно, какой самый чистый и эффективный способ избежать этих предупреждений:
18 ответов:
причина моего предпочтения заключается в том, что он не выделяет пустой массив, когда вам все равно нечего начинать.
Как насчет этого? много чище и все в одну линию.
Я обычно использую конструкцию, подобную этой:
обратите внимание, что эта конкретная версия не тестируется, ее вводят непосредственно в SO из памяти.
Edit: добавил проходимым Регистрация
пожалуйста, не зависит от литья в качестве решения, даже если другие предлагают это как допустимый вариант для предотвращения ошибки, это может привести к другому.
имейте в виду: если вы ожидаете, что будет возвращена определенная форма массива, это может привести к ошибке. Для этого требуется больше проверок.
всегда проверяйте входные данные, прежде чем использовать его в foreach. Предложения: