而且for循环不起作用

时间:2014-08-21 21:35:00

标签: php mysql datetime time

我有一个问题,我认为有一个非常简单的解决方案,但我现在忙了12个小时,而且我不知道这个问题的解决方案。

我有一个包含多个数据的数据库。重要的数据是我在数据库中保存的时间。我想构建一个模块,提供数据08:00到17:00。例如:

08:00 available
09:00 not available
10:00 available
11:00 available
12:00 available
13:00 available
14:00 available
15:00 available
16:00 available
17:00 not available

我将使用以下代码

$mysql['avail'] = mysql_query("SELECT time FROM `module` WHERE `date` = '" . $dbdate . "' ORDER BY date");
while($avail = mysql_fetch_assoc($mysql['avail'])){

  $hour = date('s',$avail['time']);

  for ($i = 8;$i <= 17; $i++) {

    if($hour == $i) {

        echo $i.':00&nbsp;not available<br />';

    } else {


        echo $i.':00&nbsp;available<br />';

    }

  } 

}

现在我得到以下输出:

08:00 available
09:00 not available
10:00 available
11:00 available
12:00 available
13:00 available
14:00 available
15:00 available
16:00 available
17:00 available

08:00 available
09:00 available
10:00 available
11:00 available
12:00 available
13:00 available
14:00 available
15:00 available
16:00 available
17:00 not available

无论我尝试什么,我都无法解决问题。有没有人可以帮助我?

3 个答案:

答案 0 :(得分:5)

您必须首先获取所有可用时间,然后使用您的时间表进行一次循环,并检查每小时是否在可用小时数组中。

像这样的东西

$not_available_hours = array();
$mysql['avail'] = mysql_query("SELECT time FROM `module` WHERE `date` = '" . $dbdate . "' ORDER BY date");
while($avail = mysql_fetch_assoc($mysql['avail'])){
    $not_available_hours[] = date('s',$avail['time']);
}

for ($i = 8;$i <= 17; $i++) {
    if (in_array($i, $not_available_hours) {
        echo $i.':00&nbsp;not available<br />';
    } else {
        echo $i.':00&nbsp;available<br />';
    }
}

答案 1 :(得分:0)

您应该使用mysql HOUR函数来获取小时。

$mysql['avail'] = mysql_query("SELECT HOUR(time) as `hour` FROM `module` WHERE `date` = '" . $dbdate . "' ORDER BY date");
while($avail = mysql_fetch_assoc($mysql['avail'])){

  $hour = $avail['hour'];

  for ($i = 8;$i <= 17; $i++) {

    if($hour == $i) {

        echo $i.':00&nbsp;not available<br />';

    } else {


        echo $i.':00&nbsp;available<br />';

    }

  } 

}

并且您不应使用mysql函数,而应使用mysqli

答案 2 :(得分:0)

我认为这会产生欲望结果:

$mysql['avail'] = mysql_query("SELECT time FROM `module` WHERE `date` = '" . $dbdate . "' ORDER BY date");
$notAvailable = array();
while($avail = mysql_fetch_assoc($mysql['avail'])){
 $notAvailable[] = date('s',$avail['time'])
}
  for ($i = 8;$i <= 17; $i++) {

    if(in_array($i, $notAvailable) {
        echo $i.':00&nbsp;not available<br />';
    } else {
        echo $i.':00&nbsp;available<br />';
    }

  }