PHP - 使用foreach获取第一个元素

MEM*_*MEM 25 php iteration foreach

想知道在foreach循环上获得第一次迭代的好方法是什么.我想在第一次迭代时做一些不同的事情.

在这些情况下,条件是我们的最佳选择吗?

pok*_*oke 72

是的,如果你不能以不同的方式浏览对象(正常的循环),在这种情况下只需使用条件:

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

    // do something
}
Run Code Online (Sandbox Code Playgroud)


Kli*_*nky 35

更多的优雅者:

foreach($array as $index => $value) {
 if ($index == 0) {
      echo $array[$index];
 }
}
Run Code Online (Sandbox Code Playgroud)

该示例仅在您使用PHP的内置数组追加功能/功能或以适当的数字顺序手动指定键时才有效.

这里的方法与此处列出的其他方法不同,它应该通过任何PHP数组的自然顺序工作.

$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
Run Code Online (Sandbox Code Playgroud)


Rus*_*ias 10

你可以简单地在开头添加一个计数器,如下所示:

$i = 0;

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


dan*_*317 6

我在我的搜索结果集中的博客文章中看到了这个解决方案,提出了这篇文章,我觉得它很优雅.虽然处理可能有点沉重.

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
Run Code Online (Sandbox Code Playgroud)

请注意,帖子上还有一个警告,即只有在数组值唯一时才会有效.如果你的最后一个元素是"世界"而中间的一些随机元素也是"世界",那么最后一个元素将执行两次.


jan*_*ver 5

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

更优雅。

  • @yan 嗯,要么*后增量运算符*工作[如描述](http://php.net/manual/en/language.operators.increment.php),要么PHP严重损坏...... (3认同)