Интересно, что было бы хорошим способом получить первую итерацию в цикле 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
}
более элегантный.