как проверить, является ли указатель массива первым элементом в цикле 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 скорее использует это... или по-другому...

в весь логический путь, кажется, почти как... cheeting :с

спасибо,

Алекс

8 ответов


вы можете сделать это, используя " current ()"

$myArray = array('a', 'b', 'c');
if (current($myArray) == $myArray[0]) {
    // We are at the first element
}

Docs:http://php.net/manual/en/function.current.php

способы извлечения первого элемента:

$myArray[0]

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

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

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

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


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

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

$i = 0;

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

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

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

$first = array_shift($array);

и foreach над массивом remain;


$first = array_shift($idx);

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

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


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

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

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

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