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 如果数组最后的主要内容,如果未能解决你的问题,请参考以下文章