【问题标题】:PHP - loop through SQL resultset. When condition met repeatPHP - 遍历 SQL 结果集。当条件满足时重复
【发布时间】:2013-03-07 02:23:59
【问题描述】:

对 PHP 来说还很陌生,所以问题来了。我有一个具有以下结构的 SQL 结果集:

ItemID Desc
0      A
1      B
2      C
0      D
3      E
0      F
4      G
5      H

对于每个 ItemID = 0 我想创建一个表。然后对于 ItemID = 0 下的每个 ItemID,我想在新表中创建一行,直到我点击下一个 ItemID = 0。重复直到结束。

期望的结果:

<table>
    <tr>
        <td>A</td>
    </tr>
</table>
<table>
    <tr>
        <td>B</td>
    </tr>
    <tr>
        <td>C</td>
    </tr>
</table>
<table>
    <tr>
        <td>D</td>
    </tr>
</table>
<table>
    <tr>
        <td>E</td>
    </tr>
</table>
<table>
    <tr>
        <td>F</td>
    </tr>
</table>
<table>
    <tr>
        <td>G</td>
    </tr>
    <tr>
        <td>H</td>
    </tr>
</table>

当 ItemID = 0 时,我可以打印每个表,但怀疑这是正确的方法。这是我到目前为止的 php 代码:

$legendSql="select ItemID, Desc from ...";
$getLegend=sqlsrv_query($conn, $legendSql);
while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) ) {
    if ($row['ItemID'] === '.00') { // when ItemID = 0 create table
        print '<table>';
        print '<tr>';
        print '<td>';
        print $row['Desc'];
        print '</td>';
        print '</tr>';
        print '</table>';
    }
//    foreach( )?????
   }

【问题讨论】:

    标签: php loops while-loop html-table


    【解决方案1】:

    类似这样的:

    $first=1;
    
    while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) )
      {
    
        if ($row['ItemID'] === '.00') // when ItemID = 0 create table
        {
          if ($first==0)
          {
            print '</table>';
          }
          print '<table>';
          print '<tr>';
          print '<td>';
          print $row['Desc'];
          print '</td>';
          print '</tr>';
          print '</table>';
          $first=1;
        }
        else
        {
          if ($first==1)
          {
            print '<table>';
            $first=0
          }
          print '<tr>';
          print '<td>';
          print $row['Desc'];
          print '</td>';
          print '</tr>';
        }
    }
    if ($first==0)
    {
      print '</table>';
    }
    

    【讨论】:

    • 只要元素正确,从 HTML 的角度来看它的外观并不重要。
    • 如果我这样做正确,这里是我得到的结构:
      A
      B C 我也在$row['ItemID'] ==='.00' 中添加了print &lt;tr&gt; 块。
    • 这是我正在做的一个非常简单的例子。该结构确实很重要,因为从 ItemID = '.00' 行创建的表实际上是使用 jquery 的切换菜单的根。当您单击每个 ItemID= '.00' 行时,它将展开以显示其下方的项目。
    • 感谢您扩展您的回答。像魅力一样工作。
    【解决方案2】:

    只需稍微更改您的 if 声明:

    if ($row['ItemID'] === '.00') { // when ItemID = 0 create table
        print '<table>';
    }
    print '<tr>';
    print '<td>';
    print $row['Desc'];
    print '</td>';
    print '</tr>';
    

    在while 循环之外,放这个:

    print '</table>';
    

    整个循环结构变成:

    while( $row = sqlsrv_fetch_array( $getLegend, SQLSRV_FETCH_ASSOC) ) {
        if ($row['ItemID'] === '.00') {
            print '<table>';
        }
        print '<tr>';
        print '<td>';
        print $row['Desc'];
        print '</td>';
        print '</tr>';
    }
    print '</table>';
    

    【讨论】:

    • 我不认为这会起作用,因为它会在一个 tr 元素中创建多个表格元素,但只有 1 个关闭表格。
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2016-03-24
    相关资源
    最近更新 更多