как проверить, находится ли указатель массива на первом элементе цикла foreach - PullRequest
13 голосов
/ 07 февраля 2012

В цикле 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;, а затем, как только циклы будут итерированы один раз, установите bool вfalse.

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

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

Ура,

Алекс

Ответы [ 7 ]

20 голосов
/ 09 декабря 2012

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

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

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

14 голосов
/ 07 февраля 2012

Вы можете сделать это, используя «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);
5 голосов
/ 07 февраля 2012
$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;
}
2 голосов
/ 07 февраля 2012

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

$i = 0;

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

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

или извлеките первый элемент с помощью

$first = array_shift($array);

и foreach над оставшимся массивом;

1 голос
/ 07 февраля 2012
$first = array_shift($idx);

foreach($idx as $key => $value){
...
...
...
}
1 голос
/ 07 февраля 2012

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

0 голосов
/ 17 ноября 2013

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

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

В цикле 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...