【问题标题】:How to manipulate query result in PHP to repeat first row如何在 PHP 中操作查询结果以重复第一行
【发布时间】:2014-12-17 17:51:54
【问题描述】:

如何在 while 循环的外部和内部回显查询结果的第一行 2 次或更多次?

以下代码只是在循环外回显第一行,不允许在循环内再次回显

case '1':
      $db->Query("SELECT titulo_video,subtitulo_video,youtube_id,nome_norma FROM videos");
      echo "<h2>" . $db->Row()->nome_norma . "</h2>";
      while ($row = $db->Row()) {
        echo "<h3>" . $row->titulo_video . "</h3>";
        echo "<p>" . $row->subtitulo_video . "</p>";
      }
      break;

我想要的数据如下:

    <h3>row 1 - colum 1</h3>

    <h2>row1 - colum 2</h2>    
    <p>row 1 - colum 3</p>

    <h2>row2 - colum 2</h2>    
    <p>row 2 - colum 3</p>

    <h2>row3 - colum 2</h2>    
    <p>row 4 - colum 3</p>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你可以稍微摆弄一下循环。

    if ($row = $db->Row ())
    {
        echo '<h2>' ...;
        do
        {
            echo '<h3>' ...;
            echo '<p>' ...;
        } while ($row = $db->Row ());
    }
    

    【讨论】:

    • 不错的解决方案。供参考:PHP do-while loops
    • 我认为它在概念上比哨兵值更清晰(并且更容易阅读),并且也不需要到处迭代的额外测试。
    • 哨兵值是一种完全可以接受的方法,但它需要每次迭代都进行测试(这可能是也可能不是问题),一个额外的变量,并且使用值 0 作为开始,而不仅仅是将使用它的代码放在开头。如果该数字实际上用于其他用途,或者存在其他特殊情况,例如在每 N 行之间(甚至可能是广告)插入标题,则 Sentinel 会比我的解决方案更好。
    • 也许我没有解释清楚。我需要将第一行重复两次,第一行用于第一列,另一行用于循环内的第二列
    • 实际上就是这样。试试看。第一次加载 $row 时(在if 语句中),它用于标题,然后进入循环,基本上可以重用它。只有 之后,才会加载下一行。 do ... while 循环在没有加载新行时结束。
    【解决方案2】:

    使用 Sentinel value

      $i = 0;
      while ($row = $db->Row()) {
        echo "<h3>" . $row->titulo_video . "</h3>";
        echo "<p>" . $row->subtitulo_video . "</p>";
        if($i==0){
           echo "<h3>" . $row->titulo_video . "</h3>";
           echo "<p>" . $row->subtitulo_video . "</p>"; 
        }
       $i++;
      }
    

    【讨论】:

      【解决方案3】:

      如果您真的想以不同的方式处理第一行,请完全在循环之外处理它,而不是在您的 while 循环中包含条件,这样处理它会更干净:

      $first_row = $db->Row();
      echo "<h2>" . $first_row->nome_norma . "</h2>";
      echo "<h3>" . $first_row->titulo_video . "</h3>";
      echo "<h3>" . $first_row->subtitulo_video . "</h3>";
      
      while ($row = $db->Row()) {
        echo "<h3>" . $row->titulo_video . "</h3>";
        echo "<p>" . $row->subtitulo_video . "</p>";
      }
      break;
      

      【讨论】:

        猜你喜欢
        • 2020-04-10
        • 1970-01-01
        • 2018-08-01
        • 2015-03-16
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        相关资源
        最近更新 更多