【问题标题】:Create table with PHP checking with before value and current value (Array)使用 PHP 检查前值和当前值(数组)创建表
【发布时间】:2018-02-14 11:06:54
【问题描述】:

这是我的数据表1。我希望将此表更改为 table2。我必须为此使用 PHP。我使用 foreach 编写了一些代码,但这不能正常工作。 C

table1

|-------+------------+--------------+---------+--------|
|Seq No | Student Id | Subject Name |  Exams  | Marks  |
|-------+------------+--------------+---------+--------|
|  1    | 200301     |   maths      |  Exam 1 |  25    |
|  2    | 200301     |   maths      |  Exam 2 |  45    |
|  3    | 200301     |   art        |  Exam 1 |  76    |
|  4    | 200301     |   art        |  Exam 2 |  42    |
|  5    | 200302     |   maths      |  Exam 1 |  71    |
|  6    | 200302     |   maths      |  Exam 2 |  78    |
|  7    | 200302     |   art        |  Exam 1 |  35    |
|  8    | 200302     |   art        |  Exam 2 |  61    |
|-------+------------+--------------+---------+--------|

我想使用 PHP 创建像 table2 这样的东西。

表 2

|-------+------------+-----------------+-----------------+
|       |            |     maths       |      art        |  
|Seq No | Student Id |-----------------|-----------------|
|       |            | Exam 1 | Exam 2 | Exam 1 | Exam 2 |
|-------+------------+-----------------+-----------------+
|  1    | 200301     |   25   |   45   |  76    |  42    |
|  2    | 200302     |   71   |   78   |  35    |  61    |
|-------+------------+--------+--------+--------+--------|

**我写了一些这样的。但这不能正常工作。 **

$output .= "<table border=1>
          <tr bgcolor=#ffffff><td>SeqNo</td>
          <td>Student Id</td>
          <td>maths</td>
          <td>art</td>
          <td>Exam 1</td>
          <td>Exam 2</td></tr>";

          $studentCounter = 0;

foreach($result as $item)
            {
            $output .= "<tr><td>" . ++$studentCounter . " </td>  
                                        <td>" . $item[STUDENT_ID] . "</td>
                                        <td>" . $item[MATHS] . "</td> 
                                        <td>" . $item[ART] . "</td>
                                        <td>" . $item[EXAM_1] . "</td>
                                        <td>" . $item[EXAM_2] . "</td></tr>";

            }
 $output .= "</table>";

这是我的数组

Array([1] => Array([STUDENT_ID] => 200301
               [SUBJECT_NAME] => maths
               [ASSIGNMENT_TITLE] => exam_1
               [MARKS] => 25 )
  [2] => Array([STUDENT_ID] => 200301
               [SUBJECT_NAME] => maths
               [ASSIGNMENT_TITLE] => exam_2
               [MARKS] => 45 )
  [3] => Array([STUDENT_ID] => 200301
               [SUBJECT_NAME] => art
               [ASSIGNMENT_TITLE] => exam_1
               [MARKS] => 76 )
  [4] => Array([STUDENT_ID] => 200301
               [SUBJECT_NAME] => art
               [ASSIGNMENT_TITLE] => exam_2
               [MARKS] => 42 )
  [5] => Array([STUDENT_ID] => 200302
               [SUBJECT_NAME] => maths
               [ASSIGNMENT_TITLE] => exam_1
               [MARKS] => 71 )
  [6] => Array([STUDENT_ID] => 200302
               [SUBJECT_NAME] => maths
               [ASSIGNMENT_TITLE] => exam_2
               [MARKS] => 78 )
  [7] => Array([STUDENT_ID] => 200302
               [SUBJECT_NAME] => art
               [ASSIGNMENT_TITLE] => exam_1
               [MARKS] => 35 )
  [8] => Array([STUDENT_ID] => 200302
               [SUBJECT_NAME] => art
               [ASSIGNMENT_TITLE] => exam_2
               [MARKS] => 61 )
 )

这是我的数组数据。我必须使用这个数组创建table2。任何人都可以帮助我。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    如果我理解正确,您希望表 2 如插图所示,因此我将以此为基础回答您的问题。

    您可以使用下面的 HTML,它看起来像您想要的表格。

    <table border=1>
      <tr bgcolor=#ffffff>
        <td>SeqNo</td>
        <td>Student Id</td>
        <td colspan = "2">maths</td>
        <td colspan = "2">art</td>
        </tr>
        <tr>
        <td colspan = "2"></td>
        <td>Exam 1</td>
        <td>Exam 2</td>
        <td>Exam 1</td>
        <td>Exam 2</td>
      </tr>
          <tr>
        <td></td>
        <td></td>
        <td>Exam 1</td>
        <td>Exam 2</td>
        <td>Exam 1</td>
        <td>Exam 2</td>
      </tr>
    </table>
    

    想看 jsFiddle here

    你没有发布你的 SQL 你不需要使用forwach 你可以while 循环它,如下所示。

    <table border=1>
      <tr bgcolor=#ffffff>
        <td>SeqNo</td>
        <td>Student Id</td>
        <td colspan = "2">maths</td>
        <td colspan = "2">art</td>
        </tr>
        <tr>
        <td colspan = "2"></td>
        <td>Exam 1</td>
        <td>Exam 2</td>
        <td>Exam 1</td>
        <td>Exam 2</td>
      </tr>
    <?PHP while($row = $stmt -> fetch(PDO::FETCH_ASSOC){ ?>
      <tr>
        <td>$row["seqNo"]</td>
        <td>$row["studen_id"]</td>
        <td>$row["Exam1"]</td>
        <td>$row["Exam2"]</td>
        <td>$row["Exam1"]</td>
        <td>$row["Exam2"]</td>
      </tr>
    <?php } ?>
    </table>
    

    请记住,这没有您的 SQL,因此请根据您的需要进行调整,并且位于 PDO

    【讨论】:

    • 请查看table1。有相同的学生证会重复。那么这段代码不能正常工作。
    • 正如我告诉你的那样,我给了你一个例子,你没有发布任何 SQL 或任何其他需要的代码,所以我只是凭直觉。接受这个想法并对其进行调整,直到它起作用。我的代码不是复制粘贴,运行就是一个例子。
    • 如何查看留级生,之后我必须去另一条记录。
    • GROUP 学生证记录。
    【解决方案2】:

    这将是您的餐桌设计:(https://jsfiddle.net/vg3whzvq/2/)

    <table border=1>
          <tr bgcolor=#ffffff>
            <td rowspan="2">SeqNo</td>
            <td rowspan="2">Student Id</td>
            <td colspan = "2">maths</td>
            <td colspan = "2">art</td>
            </tr>
            <tr>
            <td>Exam 1</td>
            <td>Exam 2</td>
            <td>Exam 1</td>
            <td>Exam 2</td>
          </tr>
              <tr>
            <td>1</td>
            <td>200301</td>
            <td>51</td>
            <td>25</td>
            <td>64</td>
            <td>45</td>
          </tr>
        </table>
    

    现在要使用 php 显示数据,您可以执行以下操作:

    $output .= "<table border=1>
              <tr bgcolor=#ffffff>
                <td rowspan="2">SeqNo</td>
                <td rowspan="2">Student Id</td>
                <td colspan = "2">maths</td>
                <td colspan = "2">art</td>
                </tr>
                <tr>
                <td>Exam 1</td>
                <td>Exam 2</td>
                <td>Exam 1</td>
                <td>Exam 2</td>
              </tr>";
    
              $studentCounter = 0;
    
    foreach($result as $item)
                {
                $output .= "<tr>
                              <td>" . ++$studentCounter . " </td>  
                              <td>" . $item[STUDENT_ID] . "</td>
                              <td>" . $item[MATHS_EXAM_1] . "</td> 
                              <td>" . $item[MATH_EXAM_2] . "</td>
                              <td>" . $item[ART_EXAM_1] . "</td>
                              <td>" . $item[ART_EXAM_2] . "</td>
                            </tr>";
                }
    
     $output .= "</table>";
    

    现在取决于您的$result 的外观。

    【讨论】:

    • 请查看table1。有相同的学生证会重复。那么这段代码不能正常工作。
    • 有没有办法调整你的$result?一个 StudentID 是否总是有 2 个条目?
    • 总是不是 2 个条目,有时一个学生 ID 需要 3 个条目。
    • 你能调整你的SQL吗?您应该在一排进行数学和艺术考试。然后你可以使用 foreach 来获得你想要的设计。如果不是,您必须先对数组进行排序,然后使用 foreach()
    • $QI = DBQuery($sql); $result = DBGet($QI,array('STUDENT_ID'=&gt;'student_id','MATHS'=&gt;'maths',‌​'ART'=&gt;'art','EXAM_1‌​'=&gt;'exan_1','EXAM_2'‌​=&gt;'EXAM_2')); $columns = array('STUDENT_ID'=&gt;'student id','MATHS'=&gt;'maths','ART'=&gt;'art','EXAM_1'=&gt;'Exam 1','EXAM_2'=&gt;'Exam 1'); 这是我的sql数组
    【解决方案3】:

    您可以通过 group_concat mysql 函数使用 sql 生成结果

    SELECT * FROM table1 GROUP_CONCAT(student_id) ORDER BY subject_name DESC
    

    这个查询会产生类似这样的结果

    student id=>1,subject=>math,exam1=>15,exam2=>20,subject=>art,exam1=>17,exam2=>19
    

    【讨论】:

      【解决方案4】:

      Rowspan 告诉单元格占用多少行,colspan 多少列。

      $output .= "<table border=1>
          <tr bgcolor=#ffffff>
              <td rowspan="2">SeqNo</td>
              <td rowspan="2">Student Id</td>
              <td colspan="2">maths</td>
              <td colspan="2">art</td>
          </tr>
          <tr>
              <td>Exam 1</td>
              <td>Exam 2</td>
              <td>Exam 1</td>
              <td>Exam 2</td>
          </tr>";
      
      $studentCounter = 0;
      
      foreach($result as $item) {
          $output .= "<tr>
              <td>" . $studentCounter++ . " </td>  
              <td>" . $item["STUDENT_ID"] . "</td>
              <td>" . $item["MATHS"] . "</td> 
              <td>" . $item["ART"] . "</td>
              <td>" . $item["EXAM_1"] . "</td>
              <td>" . $item["EXAM_2"] . "</td></tr>";
      }
      
      $output .= "</table>";
      

      【讨论】:

      • 我想创建PHP 代码。我有超过 1000 条记录。不是 HTML 代码,我想要 PHP 代码
      • 你必须检查表1。有重复的学生ID。然后我必须检查,然后再检查另一个主题名称。我该怎么做?
      • 你写过任何查询吗?
      • 您可能希望将当前的 sql 添加到 OP。
      【解决方案5】:

      一旦我没有检查输出我假设数组如下所示,试试这个

      array(
           [
            "STUDENT_ID" => "1", 
           'MATHS' => 
                   array( 
                       "EXAM_1" => 'test 1', 
                       "EXAM_2" => 'test2'), 
           'ART' => 
                   array( 
                       "EXAM_1" => 'test 1', 
                        "EXAM_2"=> 'test2')
            ],
           [
            "STUDENT_ID" => "2", 
           'MATHS' => 
                   array( 
                       "EXAM_1" => 'test 1', 
                       "EXAM_2" => 'test2'), 
           'ART' => 
                   array( 
                       "EXAM_1" => 'test 1', 
                        "EXAM_2"=> 'test2')
            ]
           );
      

      `

      $output .= "<table border=1>
            <tr bgcolor=#ffffff><td>SeqNo</td>
            <td>Student Id</td>
            <td colspan="2">maths</td>
            <td colspan="2">art</td>
            ";
      
           $studentCounter = 0;
      
           foreach($result as $item)
              {
              $output .= "<tr><td>" . ++$studentCounter . " </td>  
                             <td>" . $item[STUDENT_ID] . "</td>
                             <td>" . $item[MATHS][EXAM_1] . "</td> 
                             <td>" . $item[MATHS][EXAM_2] . "</td>
                             <td>" . $item[ART][EXAM_1] . "</td>
                             <td>" . $item[ART][EXAM_2] . "</td></tr>";
                           "
      
              }
         $output .= "</table>";
      

      【讨论】:

      • 你必须检查table 1。有Student Id重复。然后我必须检查,然后再检查另一个主题名称。我该怎么做?
      • 如果可能的话,使用Group Concat 之类的东西来为同一学生分组所有科目标记,请参考this
      【解决方案6】:

      在我看来,您使用的表结构不正确。

      这是您要查找的表格布局的正确表格结构。

      <table border=1>
          <thead>
              <tr>
                  <th rowspan="2">Seq N0</th>
                  <th rowspan="2">Student Id</th>
                  <th colspan="2">maths</th>
                  <th colspan="2">art</th>
              </tr>
              <tr>
                  <td>Exam 1</td>
                  <td>Exam 2</td>
                  <td>Exam 1</td>
                  <td>Exam 2</td>  
              </tr>
          </thead>
          <tbody>
              <tr>
                  <td>1</td>
                  <td>1</td>
                  <td>82</td>
                  <td>90</td>
                  <td>60</td>
                  <td>82</td>
              </tr>
              <tr>
                  <td>1</td>
                  <td>1</td>
                  <td>82</td>
                  <td>90</td>
                  <td>60</td>
                  <td>82</td>
              </tr>
          </tbody>
      </table>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        • 2018-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多