php foreach里面的声明问题

Lay*_*wah 5 php foreach for-loop

很抱歉,如果之前有人询问过,但我无法找到问题的答案.

我正在尝试使用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>";
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

目前我给了一个页面,
上午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 AM
05:30 AM

接下来我想要约会的时间.

我试图实现类似于http://mrbs.sourceforge.net/的东西 我不能使用他们的系统,因为我无法正确集成它,我已经尝试查看他们的代码,它似乎指向许多文件,我无法理解我追求的功能.

如果这个不够清楚,请告诉我,并会尝试进一步解释.

Lay*_*wah 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
?>
Run Code Online (Sandbox Code Playgroud)

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

这证明了如果没有预约,$eas 就不会运行,也不会增加,因此保留在最后增加的 $eas 上。

再次感谢大家的帮助。