Это моя таблица данных1. Я хочу, чтобы эта таблица изменилась на table2. Я должен использовать 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
вы можете 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
,
Это будет дизайн вашего стола 🙁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>