Benjamin Crozat The web developer life

Fix "Invalid argument supplied for foreach" in PHP & Laravel

Benjamin Crozat Benjamin Crozat2 minutes read

Before you start reading this article, did you know 76 persons subscribed to my newsletter?

Join them and enjoy free content about the art of crafting websites!

Fix "Invalid argument supplied for foreach" in PHP & Laravel
Table of contents

Why does the “Invalid argument supplied for foreach()” warning occurs?

The “Invalid argument supplied for foreach()” warning occurs when you try to iterate over something other than an array or an object.

On PHP 8+, the warning has been rewritten to “foreach() argument must be of type array|object”.

Whatever version of PHP you’re on, you need to ensure that an array or an object is always passed to foreach.

Use the null coalescing operator

When you cannot be certain that you’ll get an array or null, you can use the null coalescing operator to ensure an array will always be passed to foreach.

foreach ($value ?? [] as $item) {
}

Check if your value is iterable

One of the safest way to go is to use the is_iterable() function. It checks for either:

if (is_iterable($value)) {
foreach ($value as $item) {
}
}

Use Laravel’s collections

If you’re using Laravel, you can use collections to wrap your arrays and work with safer code.

Let’s say you’re refactoring a poor-quality codebase and have to deal with uncertain return values. Wrapping the return value in the collect() helper will ensure that you always get an iterable to loop over.

// The safe collect() helper.
$items = collect(
// The unsafe method.
$foo->getItems()
);
 
// Looping over $items will always work.
foreach ($items as $item) {
//
}

Of course, since you’re using Laravel’s collections, you could refactor to their built-in methods:

$items = collect(
$foo->getItems()
);
 
$items->each(function ($item) {
//
});

Other posts to read

Are you looking for the best web hosting for Laravel projects and all budgets? I've got you covered. Here are the best I found.

You heard about Laravel but don't know where to start? Don't worry, you found the best starting point for your journey.

Let's review some quick wins that Laravel Collections provide to instantly make your codebase better.

AI is a trending topic in the programming space. It enables developers to do incredible things, and many startups build products around it.

There are multiple ways to check if an array is empty. Let me tell you about each of them and why and when you should use them.

Debugging requires dissecting everything. Here's a list of all the one-line of code built-in ways to print arrays in PHP.

Learn why and how to fix "Methods with the same name as their class will not be constructors in a future version of PHP" warnings.

Hiring a good developer can be challenging. But if you follow these tips and you will be able to hire the right fit for your projects.

PHP 8.3 will be released in November 2023, and as usual, you need to be up to date with new features and breaking changes for easier transitions.

When in doubt, clear the cache. In this article, you'll learn about how to clear every cache Laravel uses.