2016-04-26 2 views
4

私はforeachループ内で最初と最後の要素を検出したい:foreachループ内で最初と最後の要素を検出するにはどうすればよいですか?

$path = "monkey/cat/horse"; 

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

マイ所望の結果は次のとおりです。

first:monkey 
last:horse 

これは私がそれを解決しようとした方法である:

$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; 
    } 
} 

私の結果は:

first:horse 
last:horse 
+0

を試してみてください –

+2

'array_pop'と' array_shift'はあなたを助けるかもしれ – David

+1

ベストな方法[ ''($のARR)をリセット]されます(のhttp:/ /php.net/manual/en/function.reset.php)と['end($ arr)'](http://php.net/manual/en/function.end.php)を入力すると、あなたの配列を編集するが、私はあなたがこれについて気にするとは思わない。 ['$ explode = explode( '/'、$ path);エコーリセット($ explode);エコー終了($ explode); '](https:// eval。in/559901) – Bobot

答えて

6

foreachループは必要ありません。foreachループとcountを使用してください。 foreachループは配列を返します。

$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; 
} 

結果

first:monkey 
last:horse 
+0

私は何かのためにループが必要なので、各ループのために内部にある必要があります – Jarla

+0

okey、私はforeachで私の答えを更新します –

+0

ありがとう! – Jarla

1

は、配列の長さを取得します。

foreachでカウンタを取得し、インクリメントします。ループにおいて

1)カウンタ0、その最初の要素である場合。

2)counterが配列数から1を引いた場合、その最後の要素です。

<?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; 
} 
?> 

出力:

first: monkey 
last: horse 

Live demo

+0

ありがとうございました!これは機能しています。他のすべての場合に 'else'を追加しようとしましたif($ i == 0){ echo" first: "。$ segment; echo "
"; } if($ i ==($ len-1)){ echo "last:"。$ segment; } else {echo "others:"。$ segment;} – Jarla

+0

しかし、ここでは、最初の要素 'other'についても取得します。 – Jarla

+0

@Jarlaあなたは間違いがあります:' else'は2番目の 'if'を参照します。 –

3

これは、として正常に動作します。 LOOP WITH

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


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

echo "<br>"; 

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

$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

はい、あなたがループを削除したので、これは私に必要です – Jarla

1

あなたのコードが少しだけ問題があり、リセット機能により、現在の関数を変更してみてください。このように: http://php.net/manual/es/function.reset.php

よろしく:ここ

$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"; 
    } 
} 

あなたは機能を "リセット" について言及しています!

0

....あなたは、単にそれを行うことができます。この

<?php 

    $path = "monkey/cat/horse"; 

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


$data= $arr; 
echo end($data); //last value 
echo reset($data); //firast value 
?> 
関連する問題