The PHP foreach loop

PHP Fundamentals

Published: Oct 9, 2021 by C.S. Rhymes

PHP Fundamentals

This post is part of a series of posts about the fundamentals of PHP.

An alternative to the for loop, the foreach loop is used to iterate or loop over an array. The foreach loop allows you to loop through the items in the array without setting a limit for it to stop like you do in a for loop.

Once the foreach loop has looped through every item it will finish. If there are ten items in the array, then it will loop ten times.

Basic Foreach Loop

The foreach loop accepts an array as the first argument and then you give a name for the individual array item.

  • In the example below we are passing in $trees (the array) as the first argument.
  • We setting the individual array item with as $tree that can be used within the foreach loop.
  • If you don’t set both arguments then you will get a syntax error.
  • If the first argument isn’t an array then you get an invalid argument warning.
$trees = ['oak', 'ash', 'birch', 'maple'];

foreach ($trees as $tree) {
    echo $tree . ' ';
}

// oak ash birch maple

Breaking out of a foreach loop

If you want to, you can break out of a foreach loop rather than looping through every item in the array by using the break keyword. In the following example we check if the $tree is equal to ash then break the loop.

$trees = ['oak', 'ash', 'birch', 'maple'];

foreach ($trees as $tree) {
    echo $tree . ' ';

    if ($tree === 'ash') {
        break;
    }
}

// oak ash

Using the index in the Foreach loop

You can also use the index in the foreach loop. Here we have an array with the tree names as the key and a count as the value. The first argument is the array, then after the as you have a syntax that looks similar to the array syntax, as $key => $value where the first variable is the array key and the second is the array value.

$trees = [
    'oak' => 4, 
    'ash' => 3, 
    'birch' => 8, 
    'maple' => 6,
];

foreach ($trees as $tree => $count) {
    echo "There are $count $tree trees";
    echo '</br>';
}

// There are 4 oak trees
// There are 3 ash trees
// There are 8 birch trees
// There are 6 maple trees

Modifying the original value

If you want to modify the values in an array you can use a foreach loop to do this by putting the & before the second argument. In this example we add 1 to each of the original values in the array.

$myValues = [1, 2, 3, 4];

foreach ($myValues as &$myValue) {
    $myValue = $myValue + 1;
}

print_r($myValues);

// Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 )

There are also other PHP array methods that can be considered for such a use case instead of foreach, such as array_map() and array_walk()

Foreach loop with an array of objects

So far we have talked about an array, but what about an array of objects?

Here we have a Tree class or object that has name and count properties. The constructor sets these properties when a new Tree() class is created.

class Tree
{
    public $name;
    public $count;

    public function __construct($name, $count)
    {
        $this->name = $name;
        $this->count = $count;
    }
}

Next we can create an array of these Tree classes and then loop over the array. Rather than having to use the index within the foreach loop, the tree name we can access the Tree’s properties (count and name) using the arrow syntax, such as $tree->count.

$trees = [
    new Tree('oak', 4),
    new Tree('ash', 3)
];

foreach ($trees as $tree) {
    echo "There are $tree->count $tree->name trees";
    echo '<br>';
}

There are lots of use cases for a foreach loop so hopefully this introduction will give you ideas to put the foreach loop to use in your code.

PHP Beginner Code

Share

Latest Posts

Upgrading a Laravel Vapor app to PHP 8.2
Upgrading a Laravel Vapor app to PHP 8.2

I recently updated a Laravel app running on Laravel Vapor to PHP 8.2. I was a bit nervous about the upgrade but it went smoothly for me. This article goes through the steps I went through to upgrade, from local development environment, dependencies, testing and deployment to vapor.

Building a VS Code Extension for Gutenberg blocks
Building a VS Code Extension for Gutenberg blocks

I have been tasked with building a new website using WordPress. The last time I used WordPress was a few years ago and involved using Advanced Custom Fields to build custom pages and layouts. Things have changed a lot over the years and now there is the built in Gutenberg editor, which uses blocks to create a custom layout and add content. The trouble was, there didn’t seem to be great support in Visual Studio Code for the blocks, as they use HTML comments.

Using Pest to test Laravel Livewire validation rules
Using Pest to test Laravel Livewire validation rules

Last year I wrote a post about testing Laravel Livewire validation rules with PHP Unit. This post uses the same techniques as that post, but shows how to transfer it to Pest instead of PHP Unit.

How NOT to make a website

How NOT to make a Website

By C.S. Rhymes

From £8.99

Nigel's Intranet Adventure

Nigel's Intranet Adventure

By C.S. Rhymes

From £2.69