2012-02-07 8 views
10

In un ciclo for è semplice ...come verificare se puntatore è al primo elemento nel ciclo foreach

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

Come diavolo è questo fatto in un ciclo foreach?

c'è una funzione come is_first() o qualcosa del genere?

Sto cercando qualcosa di simile:

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

stavo pensando che potrei impostare un bool come $is_first = true; e poi, non appena i loop state iterate una volta, impostare il bool false.

Ma php ha un sacco di funzioni pre-costruiti e id piuttosto l'uso che ... o in un altro modo ...

Il modo bool intero sembrano quasi come ... cheeting: s

Acclamazioni ,

Alex

+3

Quindi, qual è esattamente il problema con gli imbrogli? ;-) –

risposta

10

È possibile farlo usando "correnti()"

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

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

Modi di recupero del primo elemento:

$myArray[0] 

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

Mi piace di più :) –

+6

Fintanto che non è un array associativo, o è indicizzato con la prima chiave di 0 –

+0

ho modificato il mio post iniziale che fornisce un modo per recuperare il primo elemento per altri tipi di array. – RobinUS2

0

Si può semplicemente mettere il funzionamento sul primo elemento prima della foreach ciclo, rimuovere l'elemento e quindi immettere il foreach ciclo per t lui resto degli elementi.

2

è possibile utilizzare invece contatore bool

$i = 0; 

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

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

o estrarre il primo elemento da

$first = array_shift($array); 

e foreach sulla matrice rimanere;

+0

L'uso dell'array_shift e del foreach sull'array rimanente sembra la soluzione più pulita, a patto che non si stia utilizzando l'array dopo averlo fatto scorrere. Altrimenti, vuoi far ripartire il primo elemento con array_unshift. –

1
$first = array_shift($idx); 

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

Penso che tutto quello che volete da fare è if ($key === 0)

+1

Fintanto che non è un array associativo, o è indicizzato con la prima chiave di 0 –

+0

Vero, ma la sua domanda riguardava la traduzione se ($ idx == 0) con foreach – Nabab

+0

In questo caso, sì! Sto solo anticipando la prossima domanda (o la domanda sollevata in 6 mesi quando qualcuno in una situazione simile ha una domanda simile, ma non sta usando un semplice array indicizzato) –

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

solito faccio questo:

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

funziona con qualsiasi tipo di matrice, ovviamente.

0

Qui ci sono due funzioni che rileveranno se un tasto array è il primo o l'ultimo.

Se non viene fornita alcuna chiave, assumerà la posizione corrente del puntatore.

In un ciclo foreach è necessario fornire la chiave poiché il puntatore non sarà corretto.

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; 
} 
Problemi correlati