2

我很确定我在这里或其他地方找不到答案,或者可能是因为我无法提出正确的问题是我的错,但无论如何,说我的 PHP 中有一个 for 循环,它是这样的:

for($i=0; $i<3; $i++){
echo "<a href=\"\">$i</a> | ";
}

如何使最后一次调用“ | ”不出现以便获得良好的输出:

<a href="">0</a> | <a href="">1</a> | <a href="">2</a>

代替

<a href="">0</a> | <a href="">1</a> | <a href="">2</a> | <-- remove this! :(

你们太棒了!谢谢!!!

如果 $i < $undefinedNumber 怎么办?

4

9 回答 9

2

保持流程,如果它不是第一个,你只需要它:

for ($i = 0; $i < 3; $i++) {
    echo $i ? " | " : '', "<a href=\"\">$i</a>";
}

对于第一个$iis0这意味着它是false. 否则$i为正整数,表示true

有时找到描述问题的替代方法有助于制定更简单的答案。代替:

<a href="">0</a> | <a href="">1</a> | <a href="">2</a> |  /* <-- remove this! :( */

就是这个问题:

/* :( remove this! --> */ | <a href="">0</a> | <a href="">1</a> | <a href="">2</a>

相同形式的解决方案也适用于 CSS:

a:not(:first-child):before {content: ' | '}

有时这比摆弄 PHP 和 HTML ( Example ) 更容易集成 - 但是这会添加|到链接文本或样式中(至少在我测试它的 chrome 中,看起来有问题)。

于 2012-07-09T16:35:18.213 回答
1
for($i=0; $i<3; $i++){
   echo "<a href=\"\">$i</a>"
   if ($i != 2) {
      echo " | ";
   }
}

或者

echo "<a href=\"\">0</a>";
for($i=1; $i<3; $i++){
   echo " | <a href=\"\">$i</a>"
}
于 2012-07-09T16:28:52.560 回答
1
for($i=0; $i<3; $i++) {
    if ($i == 0) {
       echo "<a href=\"\">$i</a>;
    }
    else {
       echo " | <a href=\"\">$i</a>"
    }
}
于 2012-07-09T16:30:53.490 回答
1

所以你只需要从输出中删除最后一个栏?为什么不在循环时跳过它?像这样的东西:

for($i=0; $i<3; $i++)
{
    echo "<a href=\"\">$i</a>";

     if($i < 2)
         echo "|";
}

这将确保该栏仅在前两个链接之后显示,而不是在第三个链接之后显示。

于 2012-07-09T16:32:01.883 回答
1
$output=array();
for($i=0; $i<3; $i++){
    $output[]="<a href=\"\">$i</a>";
}
$ouput=implode(' | ', $ouput);
于 2012-07-09T16:32:09.253 回答
1
$arr = array();

for ($i=0; i<3; i++)
    $arr[] = "<a href=''>$i</a>";

echo implode(" | ",$arr);

更紧凑的版本:

echo implode(" | ", array_map(function($x){return "<a href=''>$x</a>";},range(1,3)));
于 2012-07-09T16:32:33.207 回答
1

你也可以这样做:

for($i=0; $i<3; $i++) {
    $arr[] = "<a href=\"\">$i</a>";
}
echo implode(' | ',$arr);
于 2012-07-09T16:34:13.483 回答
1

这是编程中常见的情况,称为特例模式。除了使用 if 语句或三元运算符之外,没有内置的方法可以解决这个问题

for($i=0; $i<3; $i++){
    echo "<a href=\"\">$i</a>" . ($i != 2) ? " | " : "";
于 2012-07-09T16:39:29.320 回答
1

不要在 php 中做,在样式表中做。

首先构建你的 HTML

<ul class="navlinks">
     <?php foreach($links as $linkName => $linkUrl): ?>
     <li><a href="<?php echo $linkUrl; ?>"><?php echo $linkName; ?></a></li>
     <?php endforeach; ?>
</ul>

应用 CSS。

.navlinks > li:after
{ 
    content:"<li>|</li>";
}

.navlinks > li:last-child:after
{ 
    content:"";
}

您永远不应该在 php 中设置 HTML 样式,这是正确的做法。

于 2012-07-09T16:40:28.743 回答