Как проверить, является ли указатель массива первым элементом в цикле foreach

В цикле 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
    }
}

Я думал, что могу установить bool как $is_first = true;, а затем, как только цикл будет повторяться один раз, установите bool в false.

Но php имеет много заранее построенных функций, а id скорее использует это... или по-другому...

Весь путь bool выглядит почти как... cheeting: s

Приветствия,

Алекс

Ответ 1

Вы можете сделать это, используя "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);

Ответ 2

Я обычно делаю это:

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

Работает с любым типом массива, очевидно.

Ответ 3

$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;
}

Ответ 4

вы можете использовать счетчик вместо bool

$i = 0;

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

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

или извлечь первый элемент

$first = array_shift($array);

и foreach над массивом остатка;

Ответ 5

$first = array_shift($idx);

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

Ответ 6

Вы можете просто поместить операцию в первый элемент перед циклом foreach, удалить элемент и затем ввести цикл foreach для остальных элементов.

Ответ 7

Вот две функции, которые будут определять, является ли ключ массива первым или последним.

Если ключ не указан, он будет считать текущую позицию указателя.

В цикле 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;
}

Ответ 8

Я думаю, что все, что вы хотите сделать, это if ( $key === 0 )