5

抱歉,如果之前有人问过这个问题,但是我无法找到问题的答案。

我正在尝试用 PHP 为我的 Web 应用程序构建日历系统和日程安排系统,并且在某个特定区域遇到困难。

我有一个“for”语句,它将制定一天中从上午 12:00 开始到晚上 11:30 结束的时间

在这个 for 循环中,我有一个 foreach,我想在数组中回显与特定时间匹配的对象。

我尝试过的所有事情,包括使用 for、while 和 foreach 语句都没有显示我所追求的,这是时间旁边排列的事件。

这是我的代码

<?php
$tStart = strtotime($start_time);
$tEnd = strtotime($end_time);
$tNow = $tStart;

while($items = mysql_fetch_object($result)){
    $events[] = $items;
}

for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
    // Time to color the rows to make it easier to read
    if(!isset($day_row)){
        $day_row = "0";
    }
    if(isset($day_row) && $day_row >= "2"){
        $day_row--;
    }
    else{ $day_row++; 
    }

    //This bit draws the first column.
    echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";

    // MySQL stuff is now here
    foreach($events as $e => $item){
        if($item->apnt_start == $tnow){
            $rowspan = ((strtotime($item->apnt_finish)-strtotime($item->apnt_start))/"1800");
            echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$item->apnt_start."-".$item->apnt_finish." ".$item->apnt_brief."</td></tr>";
        }
    }
}
?>

目前我得到一个页面,其中包含
12:00 AM
12:30 AM
01:00 AM
01:30 AM
02:00 AM
02:30 AM
03:00 AM
03:30 AM
04:00 AM
04:30 AM
05:上午 00 点
05:30

在我想要与匹配时间约会的时间旁边。

我正在尝试实现类似于http://mrbs.sourceforge.net/ 我无法使用他们的系统但是因为我无法正确集成它并且我尝试查看他们的代码并且它似乎指向很多文件,我在尝试理解我所追求的功能时遇到了麻烦。

如果这还不够清楚,请告诉我,并将尝试进一步解释。

4

3 回答 3

0

您需要为以下变量定义和设置值:

$start_time = "09:00 AM";
$end_time = "11:30 PM";

您还需要添加查询和数据库连接(以上while($items = mysql_fetch_object($result)){语句):

mysql_connect("hostname", "user", "password");
mysql_select_db("mydb");
$result = mysql_query("select * from mytable");

编辑: 您应该使用 while mysql_fetch_assoc 而不是 mysql_fetch_object。代替

while($items = mysql_fetch_object($result)){

while($items = mysql_fetch_assoc($result)){

删除:$events[] = $items;

确保您的 while 语句在所有代码执行后结束(您在问题中列出的代码) - 右括号}

于 2012-11-17T03:53:50.297 回答
0

好的,这应该对你有用。

<?php
    $tStart = strtotime($start_time);
    $tEnd = strtotime($end_time);
    $tNow = $tStart;

    echo '<table>';

    while($events = mysql_fetch_assoc($result)){
        for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
        // Time to color the rows to make it easier to read
            if(!isset($day_row)){
                $day_row = "0";
            }
            if(isset($day_row) && $day_row >= "2"){
                $day_row--;
            }
            else{ $day_row++; 
            }

            //This bit draws the first column.
            echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";
            if(strtotime($events['apnt_start']) == $tNow) {     
                $rowspan = ((strtotime($events->apnt_finish)-strtotime($events->apnt_start))/"1800");
                echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$events->apnt_start."-".$events->apnt_finish." ".$events->apnt_brief."</td></tr>";
            }
        } //end for
    } //end while
    echo '</table>';
?>
于 2012-11-17T06:24:59.893 回答
0

我要感谢就这个问题提供建议的每个人,我终于通过添加另一个变量并使用一种将数组存储在数组中的方法来实现它。

最终代码看起来像

<?php
    $tStart = strtotime($start_time);
    $tEnd = strtotime($end_time);
    $tNow = $tStart;
    $events = array();
    $eas = "0"; // eas stands for Event Array Start. this will be used to cycle through the events in the array.
    while($items = mysql_fetch_assoc($result)){
        $events[] = $items;
    }

    for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){
        // Time to color the rows to make it easier to read
            if(!isset($day_row)){
                $day_row = "0";
            }
            if(isset($day_row) && $day_row >= "2"){
                $day_row--;
            }
            else{ $day_row++; 
            }

            //This bit draws the first column.
            echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>";
        if(strtotime($events[$eas]['apnt_start']) == $tNow) {     
                $rowspan = ((strtotime($events[$eas]['apnt_finish'])-strtotime($events[$eas]['apnt_start']))/"1800");
                echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\" >".$events[$eas]['apnt_start']."-".$events[$eas]['apnt_finish']." ".$events[$eas]['apnt_brief']."</td></tr>";
                $eas++;
           }
            else{
                echo "<td class=\"day_row".$day_row."\"></td>";
            }
        } //end for
?>

通过使用变量 $eas,我可以通过最初将其设置为 0 来控制它将从哪个数字开始,然后当它找到具有匹配时间的条目时,它会通过 if 语句,在 if 语句的末尾它被赋予 $eas++ 以增加。

然后证明,如果没有预约,$eas 将不会运行并且它不会增加,因此保留在最后增加的 $eas 上。

再次感谢大家的帮助。

于 2012-11-18T01:03:40.797 回答