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

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

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

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

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

Даже более умеренный 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 

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

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

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

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

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

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

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

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

гм

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

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