You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP课程表单元格按需求填充单个科目问题求助

PHP课程表科目单元格填充解决方案

问题背景

已有生成日期和时段表格的PHP代码:

<?php
$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$times = array('08:00-08:45','08:45-09:00','09:00-09:45','09:45-10:30','11:15-12:00','12:00-12:45');
$columns = count($times);

echo "<table border='1'>";
echo "<tr><th>Day</th>";
foreach ($times as $time) {
    echo "<th>$time</th>";
}
echo "</tr>";
foreach ($days as $day) {
    echo("<tr><th>$day</th>");
    for ($i = 0; $i < $columns; $i++) {
        echo "<td></td>";
    }
}
echo "</tr>";
echo("</table>");
?>

同时有对应34节课程的科目数组(周一至周五每天6节,周六4节):

<?php
$subjects = array('Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Math', 'Math', 'Math', 'Math', 'Math', 'Math', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Comp', 'Comp', 'Comp', 'Comp');
?>

需求是将每个科目对应填充到单个<td>中,按天数分配,但尝试的代码会把所有科目显示在每个<td>里,无法实现单个科目对应单个单元格。

错误原因

你之前的代码在每个<td>内部循环遍历了整个科目数组,导致每个单元格都输出所有科目内容,而非逐个取用数组元素。

解决方案

使用索引变量追踪当前要取用的科目数组元素,每填充一个<td>就将索引加1,同时针对周六调整单元格数量(仅生成4个),确保总单元格数和科目总数匹配。修改后的完整代码如下:

<?php
$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$times = array('08:00-08:45','08:45-09:00','09:00-09:45','09:45-10:30','11:15-12:00','12:00-12:45');
$subjects = array('Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Hindi', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Eng', 'Math', 'Math', 'Math', 'Math', 'Math', 'Math', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Evs', 'Comp', 'Comp', 'Comp', 'Comp');

// 初始化科目索引
$subjectIndex = 0;

echo "<table border='1'>";
echo "<tr><th>Day</th>";
foreach ($times as $time) {
    echo "<th>$time</th>";
}
echo "</tr>";

foreach ($days as $day) {
    echo "<tr><th>$day</th>";
    // 确定当天的时段数量:周六4节,其余6节
    $dailySlots = ($day === 'Saturday') ? 4 : 6;
    for ($i = 0; $i < $dailySlots; $i++) {
        // 取出当前索引对应的科目,然后索引自增
        echo "<td>" . $subjects[$subjectIndex++] . "</td>";
    }
    echo "</tr>";
}

echo "</table>";
?>

代码说明

  1. 索引变量$subjectIndex:从0开始,每填充一个单元格就加1,确保每个单元格对应数组中的下一个科目。
  2. 每日时段判断:通过$day === 'Saturday'判断是否为周六,只生成4个单元格,保证总单元格数(5*6+4=34)和科目数组长度一致。
  3. 逐个填充:在每个<td>中直接取用当前索引的科目元素,避免了遍历整个数组的错误操作。

内容的提问来源于stack exchange,提问作者achal naskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:44:54