PHP ¿Cómo determinar la primera y última iteración en un bucle foreach?
La pregunta es sencilla. Tengo un foreach
bucle en mi código:
foreach($array as $element) {
//code
}
En este ciclo, quiero reaccionar de manera diferente cuando estemos en la primera o última iteración.
¿Como hacer esto?
Si prefiere una solución que no requiera la inicialización del contador fuera del bucle, puede comparar la clave de iteración actual con la función que le indica la última/primera clave de la matriz.
PHP 7.3 y más reciente:
foreach ($array as $key => $element) {
if ($key === array_key_first($array)) {
echo 'FIRST ELEMENT!';
}
if ($key === array_key_last($array)) {
echo 'LAST ELEMENT!';
}
}
PHP 7.2 y mayores:
PHP 7.2 ya está en EOL (fin de vida), por lo que esto está aquí solo como referencia histórica. Evitar el uso de.
foreach ($array as $key => $element) {
reset($array);
if ($key === key($array)) {
echo 'FIRST ELEMENT!';
}
end($array);
if ($key === key($array)) {
echo 'LAST ELEMENT!';
}
}
Podrías usar un contador:
$i = 0;
$len = count($array);
foreach ($array as $item) {
if ($i == 0) {
// first
} else if ($i == $len - 1) {
// last
}
// …
$i++;
}
Para encontrar el último elemento, encuentro que este código funciona siempre:
foreach( $items as $item ) {
if( !next( $items ) ) {
echo 'Last Item';
}
}
Una versión más simplificada de lo anterior y suponiendo que no estás usando índices personalizados...
$len = count($array);
foreach ($array as $index => $item) {
if ($index == 0) {
// first
} else if ($index == $len - 1) {
// last
}
}
Versión 2: porque he llegado a detestar el uso de else a menos que sea necesario.
$len = count($array);
foreach ($array as $index => $item) {
if ($index == 0) {
// first
// do something
continue;
}
if ($index == $len - 1) {
// last
// do something
continue;
}
}