2010-10-18 12 views
22

Preguntándote cuál sería un buen método para obtener la primera iteración en un ciclo foreach. Quiero hacer algo diferente en la primera iteración.PHP - Toma el primer elemento con un foreach

¿Es un condicional nuestra mejor opción en estos casos?

Respuesta

63

Sí, si usted no es capaz de pasar por el objeto de una manera diferente (una normal para circular), sólo tiene que utilizar un condicional en este caso:

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

    // do something 
} 
+1

+1 me gusta esta mejor que la mía. –

+0

Tenía un primer elemento "natural", así que lo uso en el condicional. ;) Pero realmente aprecio esta idea. Muchas gracias. – MEM

+0

es un truco genial! pero en realidad hay alguna función para esto? – Cody

8

simplemente puede añadir un contador a la salida, de este modo:

$i = 0; 

foreach($arr as $a){ 
if($i == 0) { 
//do ze business 
} 
//the rest 
$i++; 
} 
2
first = true 
foreach(...) 
    if first 
     do stuff 
     first = false 
0

hm

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

más elegante.

+0

¿Esto realmente funcionará? ¿Se incrementará $ $ realmente después de la evaluación de la declaración? –

+3

@yan Bueno, el * operador de post-incremento * funciona [como se describe] (http://php.net/manual/en/language.operators.increment.php), o PHP está terriblemente roto ... – deceze

+0

sí . $ i ++ se evalúa después de la expresión, ++ $ i se evaluaría primero. – janoliver

29

Incluso eleganterer morer:

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

Este ejemplo sólo funciona si se utiliza matriz integrada de PHP/anexar características función o especificar teclas en orden numérico apropiado manualmente.

Aquí hay un enfoque que no es como los otros enumerados aquí que deberían funcionar a través del orden natural de cualquier matriz de 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 
+1

Esto no funcionará con matrices asociativas –

+0

@NathanBell Técnicamente todas las matrices son asociativas en PHP. Este ejemplo solo funciona si utiliza las características/funciones de anexión de matriz incorporadas de PHP o si especifica manualmente las claves en el orden numérico correcto. – Klinky

+0

gracias buen trabajo – deemi

4

vi esta solución en un blog post en mi conjunto de resultados de búsqueda que hizo subir este post y me pareció que era bastante elegante. Aunque tal vez un poco pesado en el procesamiento.

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

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

Tenga en cuenta que también hay una advertencia en la publicación que solo funcionará si los valores de la matriz son únicos. Si su último elemento es "mundo" y algún elemento aleatorio en el medio es también "mundo", el último elemento se ejecutará dos veces.

1

Ésta es también trabaja

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

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