2014-02-20 5 views
9

Ich habe ein Array von Objekten, ein Array in PHP. Wie überspringe ich das letzte Element in der Foreach-Iteration?PHP: Wie das letzte Element in Foreach-Schleife überspringen

+4

'if $ element == Ende ($ myarray) break' – sashkello

+0

Verwenden Sie array_pop() vor foreach – PravinS

+0

@sashkello Das wird unerwünschte Ergebnisse geben, wenn doppelte Elemente im Array vorhanden sind, oder wenn Elemente, die den gleichen Wert auswerten als der letzte. –

Antwort

11

Verwenden Sie eine Variable überspringen könnten zu verfolgen, wie viele Elemente haben bisher wiederholt worden und die Schleife geschnitten, wenn es das Ende erreicht:

$count = count($array); 

foreach ($array as $key => $val) { 
    if (--$count <= 0) { 
     break; 
    } 

    echo "$key = $val\n"; 
} 

Wenn Sie nicht über Speicher kümmern, können Sie über einen verkürzten Kopie des Arrays iterieren:

foreach (array_slice($array, 0, count($array) - 1) as $key => $val) { 
    echo "$key = $val\n"; 
} 
+0

Ich weiß nicht, warum es sich anfühlte wie es war schlechte Frage, aber das war sicherlich das, worum ich gefragt habe. Ich möchte alles durchschleifen, aber das letzte Element im Array ausschließen. Danke – muffin

+2

@muffin Die Frage ist wirklich, warum dieses letzte Element an erster Stelle ausgeschlossen werden sollte ... wenn es etwas Besonderes an diesem Wert gibt, sollte es vielleicht nicht ' Sei nicht da. –

0
$count = count($array); 
$i=0; 
foreach ($arr as &$value) 
{ 
    $i++; 
    if($i==($count-1)) 
    { 
     echo 'skip'; 
    } 
    else 
    { 
     echo $value; 
    } 
} 
+0

Funktioniert nicht, wenn Schlüssel Zeichenfolgen sind. –

+0

@jack okk als ich bearbeite meine Antwort .. :) –

+0

tun Sie einfach dies: für ($ i = 0; $ i <$ count-1; $ i ++) –

0

Was Sie versuchen zu tun, wird den Zweck der foreach-Schleife besiegen. Es soll das gesamte Array durchlaufen und unsere Arbeit erleichtern.

für ex: Sie können die Größe des Array mit COUNT Funktion in php bekommen und kann dann für die Schleife verwenden und den Grenzwert auf Arraysize-2, so dass die letzte Reihe wird

2

entfallen, wenn Sie don‘ t will den letzten Array-Eintrag mit Pop löschen, können Sie es wie diese

$array = array('v1','v2','v3',...) 

$counter = 1; 

foreach($array as $value) 
{ 
    //do your thing in loop 

    if($counter == count($array)) continue; // this will skip to next iteration if last element encountered. 
    $counter++; 
} 
3

Es gibt verschiedene Möglichkeiten, dies zu tun.

Wenn Ihr Array ein sequentiell Null-indexierten Array ist, könnten Sie tun:

for($i = 0, $ilen = count($array) - 1; $i < $ilen; $i++) 
{ 
    $value = $array[ $i ]; 

    /* do something with $value */ 
} 

Wenn Ihr Array ist ein assoziatives Array oder auf andere Weise nicht sequentiell Null-indiziert, könnten Sie tun:

$i = 0; 
$ilen = count($array); 
foreach($array as $key => $value) 
{ 
    if(++$i == $ilen) break; 

    /* do something with $value */ 
} 
+0

Dies ist auch eine gute Antwort .. Vielen Dank :) – muffin

+0

@muffin Gern geschehen. Wie Sie aus anderen Antworten sehen können, gibt es viele Möglichkeiten, um das zu erreichen, was Sie wollten. –

Verwandte Themen