Php 如何正确使用foreach显示mysql表中的数据?
我正在用mysql在php页面上做我学校的时间表,我有一个mysql表,如下所示Php 如何正确使用foreach显示mysql表中的数据?,php,mysql,foreach,Php,Mysql,Foreach,我正在用mysql在php页面上做我学校的时间表,我有一个mysql表,如下所示 klass | day | lesson_name 7A | Monday | lesson1 7A | Monday | lesson5 7A | Monday | lesson3 7A | Tuesday | lesson2 7A | Tuesday | lesson1 7A | Tuesday | lesson4 7A | Wednesday| lesson5 7A | Wednesday| lesson2
klass | day | lesson_name
7A | Monday | lesson1
7A | Monday | lesson5
7A | Monday | lesson3
7A | Tuesday | lesson2
7A | Tuesday | lesson1
7A | Tuesday | lesson4
7A | Wednesday| lesson5
7A | Wednesday| lesson2
7A | Wednesday| lesson1
7A | Thursday | lesson3
7A | Thursday | lesson5
7A | Thursday | lesson4
7А | Friday | lesson2
7А | Friday | lesson3
7А | Friday | lesson5
...And other classes
这是我代码的一部分:
<table border="1">
<tr align=center>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
</tr>
<?php
//$con = mysqli_connect("localhost", "user", "password", "database");
//if (mysqli_connect_errno()) {
// echo "Failed to connect to MySQL: " . mysqli_connect_error();
//}
$klass = $_POST['klass'];
$res1 = mysqli_query($con, "SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass' AND `day` LIKE 'Monday'");
$res2 = mysqli_query($con, "SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass' AND `day` LIKE 'Tuesday'");
$res3 = mysqli_query($con, "SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass' AND `day` LIKE 'Wednesday'");
$res4 = mysqli_query($con, "SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass' AND `day` LIKE 'Thursday'");
$res5 = mysqli_query($con, "SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass' AND `day` LIKE 'Friday'");
foreach ($res5 as $row5) {
echo "<tr>";
echo "<td align='center'>$row1[lesson_name]</td>";
echo "<td align='center'>$row2[lesson_name]</td>";
echo "<td align='center'>$row3[lesson_name]</td>";
echo "<td align='center'>$row4[lesson_name]</td>";
echo "<td align='center'>$row5[lesson_name]</td>";
echo "</tr>";
}
?>
</table>
星期一
星期二
星期三
星期四
星期五
对您来说,最好的方法是只进行一次DB查询,一次获取所有课程:
SELECT * FROM `Timetable` WHERE `klass` LIKE '$klass'
然后,您可以根据工作日对值进行分组:
$groupedLessons = array_reduce($allLessons, function($groups, $lesson) {
if (!array_key_exists($lesson['day'], $groups)) {
$groups[$lesson['day']] = [];
}
$groups[$lesson['day']][] = $lesson;
return $groups;
}, []);
现在,您可以使用两个嵌套的foreach循环对数据进行迭代:
foreach($groupedLessons as $day => $lessons) {
foreach ($lessons as $lesson) {
?>
<tr>
<td><?= $klass ?></td>
<td><?= $day ?></td>
<td><?= $lesson['lesson_name'] ?></td>
</tr>
<?php
}
}
foreach($groupedLessons作为$day=>$lessons){
foreach($lessons作为$lesson){
?>
如果你var\u dump($res5)
你会看到它不是一个数组。我现在会完全忘记PHP,而是专注于MySQL。记住这一点,请参阅:帮助我处理代码,请“此代码不显示任何内容”是一个无用的陈述。解决它并报告具体问题。谷歌这个问题,它已经被回答了很多次。对于初学者,学习如何使用var_dump($groupedLessons)
查看您得到了什么。但是,我已经可以告诉您,问题是,$groupedLessons
不包含课程数组,而是一个mysql资源,您需要循环并将其放入$groupedLessons中。什么是?>和@öцццццццццццццццц109首先编码。这是一种更好的方法(以及?>
和
foreach($groupedLessons as $day => $lessons) {
foreach ($lessons as $lesson) {
?>
<tr>
<td><?= $klass ?></td>
<td><?= $day ?></td>
<td><?= $lesson['lesson_name'] ?></td>
</tr>
<?php
}
}