PHP Foreach 如果数组最后

Posted

技术标签:

【中文标题】PHP Foreach 如果数组最后【英文标题】:PHP Foreach If Array Last 【发布时间】:2012-03-30 19:07:49 【问题描述】:
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 语句,但不确定最好的方法是什么,有什么想法吗?谢谢!

【问题讨论】:

您可以将第二个和第三个回声移到第一个上方。然后 if (iteration== first_time) "do_not_echo_2nd,3rd"。 看看这个解决方案:***.com/a/29474468/1478566 【参考方案1】:

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

【讨论】:

【参考方案2】:

我会这样做:

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

【讨论】:

【参考方案3】:

为什么不先弹出最后一个元素?所以你不需要检查当前元素是否是每次迭代中的最后一个元素。

函数 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>

【讨论】:

【参考方案4】:

首先您需要找出数组的最后一个键是什么,并通过使用count()函数找到数组长度来做到这一点。 之后我们将创建一个计数器并在每个循环上添加 +1。 如果计数器和最后一个键相等,那么它就是最后一个键。

$last = count($array); $计数器 = 1; foreach ($array as $key => $val) if ($counter != $last) // 除了最后一个键之外的所有键 // 做一点事 $计数器++; // 计数器计数加一 别的 // 这是最后一个键 // 其他结束 //结束foreach

【讨论】:

【参考方案5】:

end() 函数正是您所需要的:

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

【讨论】:

谢谢你,这很完美,我会接受这个作为答案,但我必须等待 3 分钟。 xD @KristianMatthews,顺便说一句,你几乎等了 2 年。 :) 小调整,我会在 foreach 循环之前将 end($tabs2) 缓存在一个 var 中,这样 end 函数就不会每次都运行。 如果我们在数组中有两个相等的值,最后一个,另一个在中间怎么办?这不是很误导吗.. @mikewasmike 您可以随时将 if 更改为 if((end($tab2) !== $tab2) && (end($name) !== $name))。如果第一个值是真的,这只会触发第二个值,这还不错。【参考方案6】:

这样的事情是可能的:

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

【讨论】:

【参考方案7】:

我发现首先检查比最后检查更容易。所以我会这样做。

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

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

【讨论】:

感谢您的帮助,但这只是立即设置$first = true; 然后$first = false; 本质上。 嗯,这很令人惊讶——它不仅会在每个非第一行的开头回显中断吗?

以上是关于PHP Foreach 如果数组最后的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用 foreach 循环时查找数组的最后一个元素

PHP foreach() 只输出数组的最后一项

php foreach循环中的变量

php-foreach遍历数组

php foreach只能遍历数组么

PHP foreach