PHP - Grab the first element using a foreach

2020-02-08 11:51发布

问题:

Wondering what would be a good method to get the first iteration on a foreach loop. I want to do something different on the first iteration.

Is a conditional our best option on these cases?

回答1:

Yes, if you are not able to go through the object in a different way (a normal for loop), just use a conditional in this case:

$first = true;
foreach ( $obj as $value )
{
    if ( $first )
    {
        // do something
        $first = false;
    }
    else
    {
        // do something
    }

    // do something
}


回答2:

Even morer eleganterer:

foreach($array as $index => $value) {
 if ($index == 0) {
      echo $array[$index];
 }
}

That example only works if you use PHP's built-in array append features/function or manually specify keys in proper numerical order.

Here's an approach that is not like the others listed here that should work via the natural order of any PHP array.

$first = array_shift($array);
//do stuff with $first

foreach($array as $elem) {
 //do stuff with rest of array elements
}

array_unshift($array, $first);     //return first element to top


回答3:

You can simply add a counter to the start, like so:

$i = 0;

foreach($arr as $a){
 if($i == 0) {
 //do ze business
 }
 //the rest
 $i++;
}


回答4:

I saw this solution on a blog post in my search result set that brought up this post and I thought it was rather elegant. Though perhaps a bit heavy on processing.

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}

Do note there is also a warning on the post that this will only work if the array values are unique. If your last element is "world" and some random element in the middle is also "world" last element will execute twice.



回答5:

first = true
foreach(...)
    if first
        do stuff
        first = false


回答6:

hm

<?php
$i = 0;
foreach($ar as $sth) {
    if($i++ == 0) {
        // do something
    }
    // do something else
}

more elegant.



回答7:

This is also works

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}


回答8:

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}