- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在表格中绘制学生类(class),其中表格单元格可以包含类(class),也可以为空。表格行以一天中的时间(以分钟为单位)开头,列代表星期几(星期日 = 1、星期三 = 4、星期六 = 7 等)。
同时出现三个类时,我的算法似乎有问题,因为打印了太多表格单元格。我认为问题与 $printed
是一个 boolean
(它可能应该是从 7 开始倒计时)有关,但我不确定.
有人可以阐明我哪里出错了吗?这是我的代码:http://phpfiddle.org/main/code/q6z-s93 .按 F9
获取示例输出。
<?php
/**
* Created by JetBrains PhpStorm.
* User: Marco
* Date: 8/22/13
* Time: 9:49 AM
*/
$name = "Table Name";
$blocks = array(
array(
"id" => 23,
"name" => "test",
"day" => 2,
"startTime" => (9 * 60) + 30,
"endTime" => 720
),
array(
"id" => 12,
"name" => "test 2",
"day" => 3,
"startTime" => (10 * 60) + 30,
"endTime" => 720
),
array(
"id" => 2,
"name" => "test 2",
"day" => 4,
"startTime" => (9 * 60) + 30,
"endTime" => (10 * 60) + 30
)
);
$tableContent = "";
$tableContent.= "
<h1 id='1' class='table-name'>$name</h1>
<table class='table table-bordered' data-id='1' border='1'>
<thead>
<tr>
<th> </th>
<th>Sunday</th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
</tr>
</thead>
<tbody>
";
$time = mktime(0, 0, 0, 1, 1);
$earliest = 720;
$latest = 1140;
for( $i = 0; $i < 1440; $i += 30 ) {
// print table rows
$rowContent = ""; // Holds table cells and content
$styles = ""; // holds `class="foo"` (row class)
for ($j = 1; $j < 8; $j++) {
// print row columns
$printed = FALSE;
if ( $i + 30 < $earliest ) {
$rowContent .= "<td> </td>";
$styles = "class='hiddenTopRow'";
$printed = TRUE;
} else if ( $i > $latest ) {
$rowContent .= "<td> </td>";
$styles = "class='hiddenBottomRow'";
$printed = TRUE;
}
foreach ( $blocks as $block ) {
// cycle through Courses and check if there is one scheduled at this time
if ( ( $block["day"] == $j ) && ( $block["startTime"] == $i ) ) {
// class starts on this day at this time
$rowspan = ( ( $block["endTime"] - $block["startTime"] ) / 30 );
$content = $block["name"];
$blockID = $block["id"];
$rowContent .= "\t" . "<td rowspan='$rowspan'
data-id='$blockID'
class='block-cell'>$content</td>" . "\r\n";
$printed = TRUE;
} else if ( ( $block["day"] == $j ) && // Class starts this day
( $block["startTime"] < $i ) && // after this time
( $block["endTime"] >= $i + 30) ) { // but isn't finished
// class is continuing
$printed = TRUE;
} else {
// no class at this time
}
}
if (!$printed) $rowContent .= "<td> </td>";
}
/* Print content */
$tableContent .= "<tr $styles>" . "\r\n";
$heading = sprintf("\t" . '<th class="time">%1$s</th>' . "\r\n",
date( 'g:i a', $time + ( $i * 60 ) ) );
$tableContent .= $heading . $rowContent;
$tableContent .= "\t" . "</tr>" . "\r\n";
}
$tableContent .= '
</tbody>
</table>
';
?>
<!DOCTYPE html>
<html lang="en">
<body>
<?php echo $tableContent ?>
</body>
</html>
最佳答案
要查看发生了什么,只需在第 84 行打印索引 $j:
if ( $i + 30 < $earliest ) {
$rowContent .= "<td> $j </td>";
$styles = "class='hiddenTopRow'";
$printed = TRUE;
}
问题是这样的:当您为单元格/ block 设置行跨度时,在接下来的行中您不知道应该跳过哪个单元格/ block 。
您可以使用数组来跟踪此信息 (http://phpfiddle.org/main/code/03w-0v6)。例如,在下面的代码中,我添加了变量 $rowJump。如果我设置 $rowJump[2] = 2,这意味着我必须在接下来的两行中跳过单元格 2。
$rowJump = Array();
for( $i = 0; $i < 1440; $i += 30 ) {
// print table rows
$rowContent = ""; // Holds table cells and content
$styles = ""; // holds `class="foo"` (row class)
for ($j = 1; $j < 8; $j++) {
// print row columns
if (isset($rowJump[$j]) && $rowJump[$j]>0) {
$rowJump[$j]--;
continue;
}
$printed = FALSE;
if ( $i + 30 < $earliest ) {
$rowContent .= "<td> $j </td>";
$styles = "class='hiddenTopRow'";
$printed = TRUE;
} else if ( $i > $latest ) {
$rowContent .= "<td> </td>";
$styles = "class='hiddenBottomRow'";
$printed = TRUE;
}
foreach ( $blocks as $block ) {
// cycle through Courses and check if there is one scheduled at this time
if ( ( $block["day"] == $j ) && ( $block["startTime"] == $i ) ) {
// class starts on this day at this time
$rowspan = ( ( $block["endTime"] - $block["startTime"] ) / 30 );
$content = $block["name"];
$blockID = $block["id"];
$rowContent .= "\t" . "<td rowspan='$rowspan'
data-id='$blockID'
class='block-cell'>$content !!</td>" . "\r\n";
$printed = TRUE;
$rowJump[$j] = $rowspan-1;
$j++;
} else
[...]
关于php - 将用户的学校时间表打印为表格的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18386284/
我有以下格式的一些数据: 薪水 代码及时 1690 09:03:00 1690 09:13:00 1690 09:07:00 1691 08:48:00 1691 08:52:00 1691 08:5
在基于 jsp 和 servelet 的 Web 应用程序中实现类似 cron 的调度程序的最佳方法是什么?使用“定时器服务”遇到了一个选项。任何其他替代方案或对计时器服务的任何评论? 提前致谢 沙米
好吧,我对 MySQL 和数据库总体来说还很陌生。我想在一段时间后对数据库进行更新。让我解释一下。 所以为了练习,我正在用 php 构建一个游戏,在这个游戏中你将能够升级东西。比如说一栋建筑,从1级升
我想为每个用户创建一个典型的学校时间表。 最终产品应如下所示: +----+---------+---------+-----------+----------+--------+ | h | Mo
我的表格: timetable +----+---------+-------+--------+---------+---------+------+ | id | user_id | s_day
我的网站涉及安排重复类(class)和事件。目前,我已经使用 php 和 javascript 构建了一个表,该表逐个时间段扫描我的 mysql 数据库,每天查看是否有安排的事件或时间段是否空闲。 它
我有一个关于日程安排的问题。我需要为约会制作一个时间表生成器。这是目前的情况。 P1 与 P2 有约会 A。 P3和P4有个约会B。 等等…… 预约 A 大约需要 15 分钟 B约需40分钟 (时长视
我有一个配置如下的 celery 时间表: CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.
我想在“每个月的最后一天 10:15”和“每个月的第一个星期日”运行 spring scheduler 作业 - 我在下面尝试过 - 但它在初始化 spring 上下文时出错: org.springf
如何在运行时检查 openmp 计划? 我使用并行循环和运行时计划编译我的代码 #pragma omp parallel for schedule(runtime) collapse(2) for(j
我已经制作了一个 Android 应用程序,并且它已成功编译,没有任何错误。但是当我在 Android 手机中运行应用程序时,它不会显示所需的输出。 这是我的 MainActivity.java: p
经过一天的痛苦,我终于将数据放入了日程安排事件中。 我现在尝试在单击事件时设置事件,它使用数据变量加载新页面。 这是 xhtml 还有 Java public void redirec
我正在使用 Primefaces Schedule 组件在我的网络应用程序中呈现事件。但我需要对他耍点小花招。对于每个呈现的事件,我需要显示一个包含事件详细信息的工具提示。使用 window.onlo
我想设置一个 crontab 表达式,每 20 分钟启动一次作业,并且它将按照时间表运行 周一至周五上午 7 点至 30 点至晚上 8 点,周六上午 7 点至 30 点至下午 4 点 到目前为止我有以
这是我根据用户输入创建表格的代码: const err = "the valid input is a number between 5 and 20, please refresh your pag
有没有办法在 HighCharts 中制作与此类似的时间线/时间表? https://developers.google.com/chart/interactive/docs/gallery/time
在关于 AES key 表的教程中,我看到 key 表的操作(旋转、rcon、s-box)应用于一个 4 字节的字。你能解释一下这个字从哪里来吗?我明白我从 128 位长的 key 中提取它。 key
SQL Server 作业/时间表 - 美国与英国夏令时调整 我们有一个基于英国的服务器,它需要在 16:30(美国中部时间 - 这可能看起来很奇怪,但这是因为一些数据的可用性)运行 SQL 代理作业
我有一个 quartz 作业,每天下午 3 点(服务器时间)运行。我想做的是让它在下午 3 点运行,但针对美国的每个时区。 quartz 作业会触发一封电子邮件给我的用户,我希望每个人都能在他们的时间
我想以一种非常简单的方式展示电视指南时间线,但我对此真的很陌生,所以我希望有人可以帮助我,我不想要太复杂的东西,而且我已经在网络上搜索并且我发现非常复杂的时间线,有很多我真的不需要的功能,我只想显示当
我是一名优秀的程序员,十分优秀!