14

I have an array of objects, any array in php. How do i skip the last element in the foreach iteration?

muffin
  • 2,034
  • 10
  • 43
  • 79

5 Answers5

22

Use a variable to track how many elements have been iterated so far and cut the loop when it reaches the end:

$count = count($array);

foreach ($array as $key => $val) {
    if (--$count <= 0) {
        break;
    }

    echo "$key = $val\n";
}

If you don't care about memory, you can iterate over a shortened copy of the array:

foreach (array_slice($array, 0, count($array) - 1) as $key => $val) {
    echo "$key = $val\n";
}
Ja͢ck
  • 170,779
  • 38
  • 263
  • 309
  • i don't know why it felt like it was a bad question, but this was certainly what i was asking about. I want to loop through everything but exclude the last element in the array.. Thanks – muffin Feb 20 '14 at 06:46
  • 2
    @muffin The question is really why that last element should be excluded in the first place ... if there's something special about that value, perhaps it shouldn't be there. – Ja͢ck Feb 20 '14 at 06:47
  • Both approaches worked fine, no errors... very self explanatory. Thank You. – Samuel Ramzan Jan 20 '21 at 03:53
  • `array_slice( $array, 0, -1 );` – xavier bs Feb 07 '21 at 21:12
5

There's various ways to do this.

If your array is a sequentially zero-indexed array, you could do:

for( $i = 0, $ilen = count( $array ) - 1; $i < $ilen; $i++ )
{
    $value = $array[ $i ];

    /* do something with $value */
}

If your array is an associative array, or otherwise not sequentially zero-indexed, you could do:

$i = 0;
$ilen = count( $array );
foreach( $array as $key => $value )
{
    if( ++$i == $ilen ) break;

    /* do something with $value */
}
Decent Dabbler
  • 22,532
  • 8
  • 74
  • 106
2

If you don't want to delete the last array entry with pop, you could skip it like this

$array = array('v1','v2','v3',...)

$counter = 1;

foreach($array as $value)
{
    //do your thing in loop

    if($counter == count($array)) continue; // this will skip to next iteration if last element encountered.
    $counter++;
}
ReNiSh AR
  • 2,782
  • 2
  • 30
  • 42
Eduscho
  • 458
  • 3
  • 12
1

What you are trying to do will defeat the purpose of foreach loop. It is meant to loop through the entire array and make our job easy.

for ex: You can get the array size using COUNT function in php and then can use for loop and set the limit to arraysize-2, so the last array will be omitted

Abhinav
  • 8,028
  • 12
  • 48
  • 89
0
$count = count($array);
$i=0;
foreach ($arr as &$value) 
{
    $i++;
    if($i==($count-1))
    {
      echo 'skip';
    }
    else
    {
      echo $value;
    }
}
Nishant Solanki
  • 2,119
  • 3
  • 19
  • 32