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>"; ?>
代码说明
- 索引变量
$subjectIndex:从0开始,每填充一个单元格就加1,确保每个单元格对应数组中的下一个科目。 - 每日时段判断:通过
$day === 'Saturday'判断是否为周六,只生成4个单元格,保证总单元格数(5*6+4=34)和科目数组长度一致。 - 逐个填充:在每个
<td>中直接取用当前索引的科目元素,避免了遍历整个数组的错误操作。
内容的提问来源于stack exchange,提问作者achal naskar
相关产品推荐
相关产品推荐

