如何在foreach循环中测试数组指针是否在第一个元素

16

在for循环中,这是一个简单的...

for ( $idx = 0 ; $idx < count ( $array ) ; $idx ++ )
{
    if ( $idx == 0 )
    {
        // This is the first element of the array.
    }
}

在foreach循环中如何做到这一点?是否有像is_first()的函数或类似的东西?我正在寻找像下面这样的东西:

foreach ( $array as $key => $value )
{
    if ( /* is the first element */ )
    {
        // do logic on first element
    }
    else
    {
        // all other logic
    }
}

我在想我可以设置一个布尔值,如$is_first = true;,然后一旦循环被迭代一次,将布尔值设置为false。

但是php有很多预先构建的函数,我宁愿使用那些...或者另一种方式...

整个布尔方式似乎几乎像...欺骗:s

干杯,

Alex


3
那么,作弊的问题究竟在哪里呢?;-) - Eugen Rieck
7个回答

24

我通常这样做:

$isFirst = true;
foreach($array as $key => $value){
  if($isFirst){
    //Do first stuff
  }else{
    //Do other stuff
  }
  $isFirst = false;
}

适用于任何类型的数组,显而易见。


1
如果您将$isFirst=false;放在第一个if内部,它将跳过在每个循环中设置变量。 - greg

15
您可以使用 "current()" 来实现此操作。
$myArray = array('a', 'b', 'c');
if (current($myArray) == $myArray[0]) {
    // We are at the first element
}

文档:http://php.net/manual/en/function.current.php

获取第一个元素的方法:

$myArray[0]

$slice = array_slice($myArray, 0, 1); 
$elm = array_pop($slice);

7
只要不是关联数组,或者是以0为第一个键的索引数组。 - Mark Baker
我修改了我的初始帖子,提供了一种获取其他类型数组的第一个元素的方法。 - RobinUS2
它不起作用。'foreach()'不能移动数组指针。current()无法显示实际的循环值。 - Vitaly Fadeev

7
$myArray = array('a' => 'first', 'b' => 'second', 'c' => 'third'); 

reset($myArray);
$firstKey = key($myArray);
foreach($myArray as $key => $value) {
    if ($key === $firstKey) {
        echo "I'm Spartacus" , PHP_EOL;
    }
    echo $key , " => " , $value , PHP_EOL;
}

3
你可以使用计数器代替布尔值。
$i = 0;

foreach ( $array as $key => $value )

    if ($i == 0) {
        // first
    } else  {
        // last
    }
    // …
    $i++;
}

或通过以下方法提取第一个元素

$first = array_shift($array);

并且在剩余的数组上进行foreach循环;


使用array_shift和foreach遍历剩余的数组似乎是最干净的解决方案,前提是在循环遍历后不再使用该数组。否则,您需要使用array_unshift将第一个元素弹回去。 - Danielle Suurlant

1
$first = array_shift($idx);

foreach($idx as $key => $value){
...
...
...
}

1

foreach循环之前,您可以对第一个元素执行操作,将该元素移除,然后对其余元素进入foreach循环。


0
这里有两个函数,可以检测数组键是否为第一个或最后一个。
如果没有提供键,则会假定当前指针位置。
在foreach循环中,您需要提供键,因为指针将不正确。
public static function isFirst($array, $key=null)
{
    if($key===null){
      $key = key($array);
    }
    reset($array);
    $first = key($array);
    return $first === $key;
}

public static function isLast($array, $key=null)
{
    if($key===null){
        $key = key($array);
    }
    end($array);
    $last = key($array);
    return $last === $key;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接