2012-02-07 11 views
10

W pętli for to proste ..., jak sprawdzić, czy wskaźnik tablicy na pierwszy element w pętli foreach

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

Jak, do cholery, jest to zrobić w pętli foreach?

Czy istnieje funkcja taka jak is_first() czy coś podobnego?

szukam czegoś podobnego:

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

Myślałam mogłem ustawić bool jak $is_first = true; a następnie jak najszybciej pętle zostały powtórzyć raz ustawić bool false.

ale PHP ma wiele gotowych funkcji i id raczej użyć tego ... czy inny sposób ...

Cały bool sposób wydaje się prawie jak ... cheeting: s

Cheers ,

Alex

+3

Jaki jest dokładnie problem z oszustwami? ;-) –

Odpowiedz

10

Można to zrobić za pomocą "current()"

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

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

Sposoby pobierania pierwszego elementu:

$myArray[0] 

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

Najbardziej mi się podoba :) –

+6

Dopóki nie jest to tablica asocjacyjna lub jest indeksowana pierwszym kluczem z 0 –

+0

, zmodyfikowałem swój początkowy wpis, który zapewnia sposób na pobranie pierwszego elementu dla innych rodzajów tablic. – RobinUS2

0

można po prostu umieścić operację na pierwszym elemencie przed foreach pętli usunąć element, a następnie wprowadź foreach pętlę dla T on resztę żywiołów.

2

można użyć przeciw zamiast bool

$i = 0; 

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

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

lub wyodrębnić przez pierwszy element

$first = array_shift($array); 

i foreach na matrycę pozostaje;

+0

Użycie array_shift i foreach nad pozostałą tablicą wydaje się być najczystszym rozwiązaniem, pod warunkiem, że po pętli nie używasz tablicy. W przeciwnym razie chcesz ponownie uruchomić pierwszy element za pomocą funkcji array_unshift. –

1
$first = array_shift($idx); 

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

myślę tylko chcesz zrobić to: if ($key === 0)

+1

Dopóki nie jest to tablica asocjacyjna lub jest indeksowana pierwszym kluczem 0 –

+0

Prawda, ale jego pytanie dotyczyło tłumaczenia ($ idx == 0) z foreach – Nabab

+0

W tym przypadku tak! Właśnie przewiduję następne pytanie (lub pytanie zadane w ciągu 6 miesięcy, gdy ktoś w podobnej sytuacji ma podobne pytanie, ale nie używa prostej tablicy indeksowanej) –

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

I zazwyczaj to zrobić:

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

współpracuje z dowolnym typem tablicy, oczywiście.

0

Oto dwie funkcje, które wykryją, czy klucz tablicy jest pierwszy czy ostatni.

Jeśli nie zostanie podany żaden klucz, przyjmie bieżącą pozycję wskaźnika.

W pętli foreach musisz podać klucz, ponieważ wskaźnik nie będzie poprawny.

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; 
} 
Powiązane problemy