How to determine the first and last iteration in a foreach loop?


The question is simple. I have a foreach loop in my code:

foreach($array as $element) {

In this loop, I want to react differently when we are in first or last iteration.

How to do this?

9/27/2014 3:48:28 PM

Accepted Answer

You could use a counter:

$i = 0;
$len = count($array);
foreach ($array as $item) {
    if ($i == 0) {
        // first
    } else if ($i == $len - 1) {
        // last
    // …
1/10/2017 2:25:07 AM

If you prefer a solution that does not require the initialization of the counter outside the loop, I propose comparing the current iteration key against the function that tells you the last / first key of the array.

This becomes somewhat more efficient (and more readable) with the upcoming PHP 7.3.

Solution for PHP 7.3 and up:

foreach($array as $key => $element) {
    if ($key === array_key_first($array))
        echo 'FIRST ELEMENT!';

    if ($key === array_key_last($array))
        echo 'LAST ELEMENT!';

Solution for all PHP versions:

foreach($array as $key => $element) {
    if ($key === key($array))
        echo 'FIRST ELEMENT!';

    if ($key === key($array))
        echo 'LAST ELEMENT!';

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow