2016-04-26 12 views
4

Ich möchte das erste und das letzte Element in einer foreach-Schleife erkennen:Wie kann ich das erste und das letzte Element in einer foreach-Schleife erkennen?

$path = "monkey/cat/horse"; 

foreach(explode('/', $path) as $segment) { 
    echo $segment; 
} 

Mein gewünschte Ergebnis ist:

first:monkey 
last:horse 

Dies ist, wie ich es zu lösen versucht:

$path = "monkey/cat/horse"; 
$explode = explode('/', $path); 

foreach($explode as $segment) { 
    if (current($explode) == $segment){ 
     echo "first:".$segment; 
    } echo "<br>"; 
    if (end($explode) == $segment){ 
     echo "last:".$segment; 
    } 
} 

Aber mein Ergebnis ist:

first:horse 
last:horse 
+0

können Sie einfach tun es .... –

+2

'array_pop' und' array_shift' kann Ihnen helfen, – David

+1

Der beste Weg sein wird [ 'reset ($ arr)'] (http://php.net/manual/en/function.reset.php) und ['end ($ arr)'] (http://php.net/manual/en/function.end.php), dies wird Sie davon abhalten Bearbeiten Sie Ihr Array, aber ich denke nicht, dass Sie sich darum kümmern. ['$ explode = explode ('/', $ path); Echo-Reset ($ explode); echo end ($ explode); '] (https: // eval.in/559901) – Bobot

Antwort

6

Keine Notwendigkeit für foreach Schleife, verwenden Sie einfach eine foreach Schleife und count. Die foreach-Schleife gibt ein Array zurück.

$path = "monkey/cat/horse"; 

$arr = explode("/", $path); 
$count = count($arr); 


foreach($arr as $key => $value){ 
    if($key == 0) echo "first:".$value; 
    elseif($key == ($count - 1)) echo "last:".$value; 
} 

Ergebnis

first:monkey 
last:horse 
+0

Es muss innerhalb einer Schleife für jede Schleife sein, weil ich die Schleife für etwas anderes brauche – Jarla

+0

okey, ich werde meine Antwort mit foreach auch aktualisieren –

+0

Vielen Dank! – Jarla

1

Get Länge des Arrays.

Holen Sie sich einen Zähler und erhöhen Sie ihn über foreach.

In der Schleife:

1), wenn Zähler 0, sein erstes Element.

2) Wenn counter Array Count minus eins ist, ist es das letzte Element.

<?php 
$path = "monkey/cat/horse"; 
$explode = explode('/', $path); 
$len = count($explode); 
$i=0; 
foreach($explode as $segment) { 
if ($i == 0) { 
    echo "first: ".$segment; 
    echo "<br/>"; 
} 
if ($i == ($len-1)) { 
    echo "last: ".$segment; 
} 
++$i; 
} 
?> 

Ausgang:

first: monkey 
last: horse 

Live demo

+0

Vielen Dank! Das funktioniert. Ich habe versucht, ein "else" für alle anderen Fälle hinzuzufügen. If ($ i == 0) { echo "first:". $ Segment; Echo "
"; } if ($ i == ($ len-1)) { echo "last:". $ Segment; } else {echo "andere:". $ Segment;} ' – Jarla

+0

Aber hier bekomme ich auch für das erste Element' other' – Jarla

+0

@Jarla hast du einen Fehler: der 'else' bezieht sich nur auf den zweiten' if'. –

3

Das funktioniert gut.

$path = "monkey/cat/horse"; 
$explode = explode('/', $path); 


echo "first:".current($explode); 

echo "<br>"; 

echo "last:".end($explode); 

MIT LOOP:

$path = "monkey/cat/horse"; 
$explode = explode('/', $path); 
$cont = 0; 

foreach($explode as $segment) { 

    if ($cont == 0){ 

     echo "first:".$segment; 
    } 

    echo "<br>"; 

    if ($cont > count($segment)){ 

     echo "last:".$segment; 
    } 

    $cont = $cont +1; 
} 
+0

ja, weil du die Schleife entfernt hast, die für mich notwendig ist – Jarla

1

Code nur ein kleines Problem hat, versuchen Sie die aktuelle Funktion durch Reset-Funktion zu ändern. Wie folgt aus:

$path = "monkey/cat/horse"; 
$explode = explode('/', $path); 
foreach($explode as $segment) { 

    if (reset($explode) == $segment){ 
     echo "first: $segment"; 
    } 

    echo "<br>"; 

    if (end($explode) == $segment){ 
     echo "last: $segment"; 
    } 
} 

Hier sind Sie die Referenz zu "Reset" -Funktion: http://php.net/manual/es/function.reset.php

Grüße!

0

versuchen diese

<?php 

    $path = "monkey/cat/horse"; 

    $arr = explode("/", $path); 


$data= $arr; 
echo end($data); //last value 
echo reset($data); //firast value 
?> 
Verwandte Themen