PHP Foreach如果数组最后

PHP Foreach If Array Last

1
2
3
4
5
6
7
8
foreach( $tabs2 as $tab2 => $name ){
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'>$name");
    echo(' |'); // If array last then do not display
    echo('
</li>
'
);
}

我正在使用foreach循环为我正在处理的WordPress插件创建导航,但我不希望最后一个元素显示"",上面的代码是我目前为止得到的,我正在考虑在注释行上使用if语句,但不确定什么是最好的方法,有什么想法吗?谢谢!


您需要的是end()函数:

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


end()是很好的函数

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

或者你也可以手动操作以获得更多的理解。

1
2
3
4
5
6
  $copyofarry = $tabs2;
    $last = array_pop($copyofarry);
    foreach( $tabs2 as $tab2 => $name ){
        if($last == $name)
         echo"|";
    }


我会这样做:

1
2
3
4
5
6
7
8
$arrLi = array();
foreach( $tabs2 as $tab2 => $name ){
  $class = ( $tab2 == $current ) ? ' current' : '';
  $arrLi[] ="<li class='posts'>$name
</li>
"
;
}
echo implode('|', $arrLi);


首先,您需要了解数组的最后一个键是什么,然后使用count()函数通过查找数组长度来完成此操作。接下来我们要创建一个计数器,并在每个循环上添加+1。如果计数器和最后一个键相等,则它是最后一个键。

1
2
3
4
5
6
7
8
9
10
11
12
13
    $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


我发现检查第一个比检查最后一个更容易。所以我改为这样做。

1
2
3
4
5
6
7
8
9
10
11
12
$first = true;
foreach( $tabs2 as $tab2 => $name ){
    if ($first) {
      $first = false;
    } else {
      echo(' | ');
    }
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'>$name
</li>
"
);
}

我还把最后两个echos组合在一起。


为什么不先弹出最后一个元素?因此,您不需要检查当前元素是否是每个迭代中的最后一个元素。

函数数组pop(&;$array)返回最后一个元素并将其从数组中移除。

1
2
3
4
5
    <?php
        $lastBreadcrumb = array_pop($breadcrumb);
        foreach ($breadcrumb as $crumb){ ?>
            <?php echo $crumb; ?>
        <?php } ?><span><?php echo $lastBreadcrumb?></span>


这是可能的:

1
2
3
4
5
6
7
8
9
10
11
12
$size = count($tabs2);
$counter = 0;
foreach( $tabs2 as $tab2 => $name ){
    $class = ( $tab2 == $current ) ? ' current' : '';
    echo("<li class='posts'>$name");
    if ( ++$counter < $size ){
        echo(' |'); // If array last then do not display    
    }
    echo('
</li>
'
);
}