中断和恢复Foreach循环

时间:2013-04-28 21:15:27

标签: php foreach

我有以下几个品牌:

$brand=array('brand1','brand2','brand3');

目标是在每个品牌的导航菜单中创建一个链接,因此我可以运行以下内容来实现这一目标:

sort($brand);
foreach ($brand as &$bval) {
$bval2 = strtolower($bval);
$bval3 = str_replace(" ", "-", $bval2);
echo '<li><a href="/?detail='.$bval3.'"';
//See note below
echo '><span>'.$bval.'</span></a></li>';
}

所有这一切都很好。但是,为了在导航菜单中指明选择了哪个品牌,链接内部需要class="tactive"。为了弄清楚选择了哪个品牌,我可以使用下面的内容,并将其插入上面代码中//See note below评论的位置。 ($currentbrand将在包含所有页面数据的文件中定义:

if ($_GET[detail]=$currentbrand) {
echo 'class="tactive"';
}

但是,为了使每个链接都不被标记为活动,这需要在foreach循环之外完成。我可以中断foreach循环,添加我需要的代码,然后恢复它以便将链接的最后部分放在那里吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

为了使每个链接都不被标记为活动,这需要在foreach循环之外完成

这是错误的假设。你真正需要做的是比较而不是 assign

if ($_GET['detail'] == $currentbrand) {
  echo 'class="tactive"';
}

否则表达式将由$currentbrand是真还是假来确定。


此外,您可以稍微重写代码并减少不需要的变量和字符串连接的数量。一个例子可能是:

sort($brand);
foreach ($brand as $bval) {
  $alias = str_replace(' ', '-', strtolower($bval));

  printf(
    '<li><a href="/?detail=%s" class="%s"><span>%s</span></a></li>',
    $alias,
    isset($_GET['detail']) && $alias === $_GET['detail'] ? 'tactive' : '',
    $bval
  );
}