【问题标题】:Nice HTML Formatting in PHP for-loop OutputPHP for循环输出中的漂亮HTML格式
【发布时间】:2012-07-09 02:22:32
【问题描述】:

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

【问题讨论】:

    标签: php html for-loop formatting


    【解决方案1】:

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

    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 (Example) 更容易集成 - 但是将 | 添加到链接文本或样式中(至少在我测试它的 chrome 中,看起来有问题)。

    【讨论】:

      【解决方案2】:
      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>"
      }
      

      【讨论】:

        【解决方案3】:
        for($i=0; $i<3; $i++) {
            if ($i == 0) {
               echo "<a href=\"\">$i</a>;
            }
            else {
               echo " | <a href=\"\">$i</a>"
            }
        }
        

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:
            $output=array();
            for($i=0; $i<3; $i++){
                $output[]="<a href=\"\">$i</a>";
            }
            $ouput=implode(' | ', $ouput);
            

            【讨论】:

              【解决方案6】:

              您也可以这样做:

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

              【讨论】:

                【解决方案7】:

                这是编程中常见的情况,称为特例模式。除了使用 if 语句或ternary operator

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

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    【解决方案9】:
                    $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-01-26
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-05-25
                      • 2012-07-13
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多