Maximize your Laravel blog's potential with SEO best practices and reach 10K monthly clicks on Google.
Preview the course for free
Benjamin Crozat New!
Benjamin Crozat The art of crafting web applications

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

Benjamin Crozat — Updated on
Artboard

Hundreds of developers subscribed to my newsletter.
Join them and enjoy free content about the art of crafting websites!

Powered by

Table of contents

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

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) {
//
});
Recommended

Learning a framework can be overwhelming, but time and execution will make you a master. Here are some best practices to help you toward your goal.

Nailing a Laravel job interview can be a daunting task, but with the right preparation and mindset, you can set yourself up for success.

I show you how to upgrade your Laravel 9 project to version 10 and help you decide whether the return on investment is worth it.

Laravel 10 has been released on February 14, 2023. Let's dive into every relevant new feature and change.

Here's a case study for my blog in the programming niche, where I share everything I did to increase clicks by a huge amount since the beginning.

I show you how to upgrade your Laravel 8 project to version 9 and help you decide whether the return on investment is worth 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.

Learn why the "Using $this when not in object context" error happens, and let me show you the only way to fix.

Start leveraging the power of AI today. It enables developers to do incredible things, and many startups build products around it.

Laravel Collections make arrays more powerful and convenient to work with. This article provides tons of quick tips to instantly make your codebase better.

Powered by