2012-02-07 12 views
10

En un bucle for es simple ...cómo probar si el puntero array es en un primer elemento de bucle foreach

for ($idx = 0 ; $idx < count ($array) ; $idx ++) 
{ 
    if ($idx == 0) 
    { 
     // This is the first element of the array. 
    } 
} 

¿Cómo diablos se hace esto en un bucle foreach?

¿hay una función como is_first() o algo?

Busco algo como:

foreach ($array as $key => $value) 
{ 
    if (/* is the first element */) 
    { 
     // do logic on first element 
    } 
    else 
    { 
     // all other logic 
    } 
} 

Estaba pensando que podría sentar un bool como $is_first = true; y entonces tan pronto como los bucles se repitan ciertos vez, establezca el bool false.

Pero php cuenta con una gran cantidad de funciones pre-construidos y la identificación sea bastante usar ese ... o de otra manera ...

todo el camino bool parecen casi como ... cheeting: s

Saludos ,

Alex

+3

Entonces, ¿cuál es exactamente el problema con hacer trampa? ;-) –

Respuesta

10

Usted puede hacer esto utilizando "actuales()"

$myArray = array('a', 'b', 'c'); 
if (current($myArray) == $myArray[0]) { 
    // We are at the first element 
} 

Docs: http://php.net/manual/en/function.current.php

maneras de recuperar el primer elemento:

$myArray[0] 

$slice = array_slice($myArray, 0, 1); 
$elm = array_pop($slice); 
+0

Me gusta más :) –

+6

Siempre que no sea una matriz asociativa, o está indexada con la primera clave de 0 –

+0

modifiqué mi publicación inicial que proporciona una forma de recuperar el primer elemento para otros tipos de matrices. – RobinUS2

0

puede sólo hay que poner la operación en el primer elemento antes de la foreach bucle, retire el elemento y luego entrar en el foreach bucle para t el resto de los elementos.

2

puede utilizar en lugar contador bool

$i = 0; 

foreach ($array as $key => $value) 

    if ($i == 0) { 
     // first 
    } else { 
     // last 
    } 
    // … 
    $i++; 
} 

o extraer el primer elemento por

$first = array_shift($array); 

y foreach sobre la matriz permanecerá;

+0

Utilizar array_shift y foreach sobre la matriz restante parece ser la solución más limpia, siempre que no esté utilizando la matriz después de recorrerla. De lo contrario, desea volver a mostrar el primer elemento con array_unshift. –

1
$first = array_shift($idx); 

foreach($idx as $key => $value){ 
... 
... 
... 
} 
-1

Creo que todo lo que quiere hacer es if ($key === 0)

+1

Siempre que no sea una matriz asociativa, o que esté indexada con la primera clave de 0 –

+0

Verdadero, pero su pregunta fue sobre la traducción de if ($ idx == 0) con foreach – Nabab

+0

En este caso, sí! Solo estoy anticipando la siguiente pregunta (o la pregunta planteada en 6 meses cuando alguien en una situación similar tiene una pregunta similar, pero no está usando una matriz indexada simple) –

5
$myArray = array('a' => 'first', 'b' => 'second', 'c' => 'third'); 

reset($myArray); 
$firstKey = key($myArray); 
foreach($myArray as $key => $value) { 
    if ($key === $firstKey) { 
     echo "I'm Spartacus" , PHP_EOL; 
    } 
    echo $key , " => " , $value , PHP_EOL; 
} 
14

normalmente hago esto:

$isFirst = true; 
foreach($array as $key => $value){ 
    if($isFirst){ 
    //Do first stuff 
    }else{ 
    //Do other stuff 
    } 
    $isFirst = false; 
} 

funciona con cualquier tipo de matriz, obviamente.

0

Aquí hay dos funciones que detectarán si una clave de matriz es la primera o la última.

Si no se proporciona ninguna llave, asumirá la posición actual del puntero.

En un bucle foreach deberá proporcionar la clave ya que el puntero no será correcto.

public static function isFirst($array, $key=null) 
{ 
    if($key===null){ 
     $key = key($array); 
    } 
    reset($array); 
    $first = key($array); 
    return $first === $key; 
} 

public static function isLast($array, $key=null) 
{ 
    if($key===null){ 
     $key = key($array); 
    } 
    end($array); 
    $last = key($array); 
    return $last === $key; 
} 
Cuestiones relacionadas