php foreach内部用于语句问题



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

我正在尝试用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
02:00 am
03:00 am
04:00 am
04:30 am
05:00 am
05:30 am

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

我正在努力实现类似于http://mrbs.sourceforge.net/然而,我不能使用他们的系统,因为我不能正确地集成它,我试着查看他们的代码,它似乎指向了许多文件,我很难理解我想要的功能。

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

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

$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语句在执行完所有代码(您在问题中列出的代码)后结束——右括号}

好吧,这应该对你有用。

<?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>';
?>

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

最后的代码看起来像

<?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上。

再次感谢大家的帮助。

最新更新