Создать таблицу с проверкой PHP с использованием значения и текущего значения (Массив)

Это моя таблица данных1. Я хочу, чтобы эта таблица менялась как таблица2. Для этого я должен использовать PHP. Я написал некоторый код, используя foreach, но это не работает должным образом. С

Таблица 1

|-------+------------+--------------+---------+--------| |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 | |-------+------------+--------------+---------+--------| 

Я хочу создать как table2 с помощью PHP.

Таблица 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 используя этот массив. любой может мне помочь.

Если я правильно понял, вы хотите, чтобы таблица 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 здесь

Вы не отправляли свой SQL, вам не нужно использовать forwach вы можете в цикле, как показано ниже.

 <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 .

Это будет ваш дизайн стола: ( 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 .

вы можете сгенерировать результат с помощью sql с помощью функции group_concat mysql

 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 

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>"; 

Попробуйте это, как только я не проверю вывод, я принимаю массив, как следует

 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 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>