2012-03-14 12 views
19
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name"); 
    echo(' |'); // If array last then do not display 
    echo('</a></li>'); 
} 

私は作業中のWordPressプラグインのナビゲーションを作成するためにforeachループを使用していますが、 '|'最後の要素のために表示するには、上記のコードは私がこれまでに得たものですが、私はコメント行にif文を使用することを考えていましたが、ありがとう!PHP Foreachの場合最後

+0

2番目と3番目のエコーを最初のエコーの上に移動することができます。それから、(iteration == first_time)なら "do_not_echo_2nd、3rd"。 – Neal

+0

この解決策を見てみましょう:http://stackoverflow.com/a/29474468/1478566 – vbarbarosh

答えて

64

end()機能は何が必要です:

if(end($tabs2) !== $name){ 
    echo ' |'; // not the last element 
} 
+0

ありがとう、これは完璧に働いた、私は答えとしてこれを受け入れるだろうが、私は3分待たなければならない。 xD –

+21

@KristianMatthews、あなたは2年前にほぼ待ちました。 :) – Thasmo

+4

私は最後の機能が毎回実行されないように、foreachループの前にvarに$ end2をキャッシュします。 – terraling

1

最後に確認するのではなく、最初に確認する方が簡単です。だから私は代わりにこのようにしています。

$first = true; 
foreach($tabs2 as $tab2 => $name){ 
    if ($first) { 
     $first = false; 
    } else { 
     echo(' | '); 
    } 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>"); 
} 

また、最後の2つを合わせてechosとしました。このような

+0

助けてくれてありがとうが、これはすぐに '$ first = true;' '$ first = false;'を設定します。 –

+0

Hm、それは驚くべきことです。最初の非先頭行の先頭で改行をエコーするだけではありませんか? –

0

何かが可能です:

$size = count($tabs2); 
$counter = 0; 
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name"); 
    if (++$counter < $size){ 
     echo(' |'); // If array last then do not display  
    } 
    echo('</a></li>'); 
} 
1

あなたは、配列の最後のキーであるかを調べる必要があるまず最初に、 count()関数を使用して、配列の長さを調べることで、配列の長さを見つけることができます。
その後、カウンタを作成してすべてのループに+1を追加します。
カウンタと最後のキーが等しい場合は、最後のキーです。

 

    $last = count($array); 
    $counter = 1; 
    foreach ($array as $key => $val){ 
    if ($counter != $last){ 
     // all keys but the last one 
     // do something  
     $counter++; // add one to counter count 
     } 
     else { 
      // this is for the last key 
    }// end else 

}// end foreach 

0

なぜ最後の要素を最初にポップしないのですか?したがって、現在の要素が各反復で最後の要素であるかどうかを確認する必要はありません。

関数array_pop(& $ array)は最後の要素を返し、配列から削除します。

<div id="breadcrumb"> 
    <?php 
     $lastBreadcrumb = array_pop($breadcrumb); 
     foreach ($breadcrumb as $crumb){ ?> 
      <a href=""><?php echo $crumb; ?></a> 
     <?php } ?><span><?php echo $lastBreadcrumb?></span> 
</div> 
私はこの方法だろう
1

$arrLi = array(); 
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    $arrLi[] = "<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>"; 
} 
echo implode('|', $arrLi); 
1

終わりは()の良い機能が

foreach($tabs2 as $tab2 => $name){ 
if(end($tabs2)== $name) 
echo "|"; 
} 

を使用するか、あなたがより理解するために、手動でそれを行うことができますです

$copyofarry = $tabs2; 
    $last = array_pop($copyofarry); 
    foreach($tabs2 as $tab2 => $name){ 
     if($last == $name) 
     echo "|"; 
    } 
関連する問題