web-dev-qa-db-ja.com

PHP Foreach If Array Last

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>');
}

Foreachループを使用してWordPressプラグインのナビゲーションを作成していますが、最後の要素であるコードに「|」を表示したくありません。上記は私がこれまでに得たものであり、コメントされた行でifステートメントを使用することを考えていましたが、どのような最善のアプローチが考えられるかわかりませんか?ありがとう!

19

end() 関数が必要です。

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

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

 
 $ last = count($ array); 
 $ counter = 1; 
 foreach($ array as $ key => $ val){
 if($ counter!= $ last){
 //最後のキーを除くすべてのキー
 //何かを行う
 $ counter ++; //カウンターカウントに1を追加します
} 
 else {
 //これは最後のキー用です
} // end else 
 
} // foreachを終了
 
1
Shahar

end()は使用するのに適した関数です

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

最後にチェックするより、最初にチェックする方が簡単だと思います。代わりにこの方法でやります。

$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も組み合わせました。

1
Waynn Lue

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

関数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>
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>');
}
0
Jovan Perovic