PHP for 循环输出中的 HTML 格式很好


Nice HTML Formatting in PHP for-loop Output

我很确定我在这里或其他地方找不到答案,或者可能是因为我的错无法提出正确的问题,但无论如何,假设我的 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呢?

保持流程,只有当它不是第一个时,你才需要它:

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

对于第一个$i0这意味着它是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(示例(更容易集成 - 但是这会将|添加到链接文本或样式中(至少在我测试它的 chrome 中,看起来有问题(。

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>"
}
for($i=0; $i<3; $i++) {
    if ($i == 0) {
       echo "<a href='"'">$i</a>;
    }
    else {
       echo " | <a href='"'">$i</a>"
    }
}

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

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

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

$output=array();
for($i=0; $i<3; $i++){
    $output[]="<a href='"'">$i</a>";
}
$ouput=implode(' | ', $ouput);

你也可以这样做:

for($i=0; $i<3; $i++) {
    $arr[] = "<a href='"'">$i</a>";
}
echo implode(' | ',$arr);

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

for($i=0; $i<3; $i++){
    echo "<a href='"'">$i</a>" . ($i != 2) ? " | " : "";

不要在 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样式,这是正确的方法。

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