PHP - захватить первый элемент, используя foreach - PullRequest
24 голосов
/ 18 октября 2010

Хотите знать, что будет хорошим методом для получения первой итерации в цикле foreach. Я хочу сделать что-то другое на первой итерации.

Условно ли является нашим лучшим вариантом в этих случаях?

Ответы [ 8 ]

70 голосов
/ 18 октября 2010

Да, если вы не можете пройти через объект другим способом (нормаль для цикла), просто используйте условное выражение в этом случае:

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

    // do something
}
34 голосов
/ 18 октября 2010

Еще больше элегантерер:

foreach($array as $index => $value) {
 if ($index == 0) {
      echo $array[$index];
 }
}

Этот пример работает, только если вы используете встроенные в 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
10 голосов
/ 18 октября 2010

Вы можете просто добавить в начало счетчик, например:

$i = 0;

foreach($arr as $a){
 if($i == 0) {
 //do ze business
 }
 //the rest
 $i++;
}
6 голосов
/ 28 августа 2014

Я видел это решение в сообщении в блоге в моем наборе результатов поиска, который поднял этот пост, и я подумал, что это довольно элегантно Хотя, возможно, немного тяжело на обработке.

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}

Обратите внимание, что в сообщении также есть предупреждение, что это будет работать, только если значения массива уникальны. Если ваш последний элемент "мир", а некоторый случайный элемент в середине также "мир", последний элемент будет выполнен дважды.

3 голосов
/ 18 октября 2010
first = true
foreach(...)
    if first
        do stuff
        first = false
2 голосов
/ 23 августа 2017

Это тоже работает

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

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
2 голосов
/ 18 октября 2010

гм

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

более элегантно.

1 голос
/ 02 июля 2018
foreach($array as $element) {
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
...