Php 如何正确使用foreach显示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

我正在用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
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
    }
}