Подтвердить что ты не робот

PHP - захватить первый элемент, используя foreach

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

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

4b9b3361

Ответ 1

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

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

    // do something
}

Ответ 2

Даже более мягкий eleganterer:

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

Ответ 3

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

$i = 0;

foreach($arr as $a){
 if($i == 0) {
 //do ze business
 }
 //the rest
 $i++;
}

Ответ 4

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

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

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

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

Ответ 5

first = true
foreach(...)
    if first
        do stuff
        first = false

Ответ 6

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

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

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

Ответ 7

гм

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

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