Php While和for循环不工作

Php While和for循环不工作,php,mysql,datetime,time,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 a

我有一个问题,我想有一个非常简单的解决办法,但我现在忙了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
无论我尝试什么,我都没有办法把它做好。有人能帮我吗?

你可能应该使用mysql的HOUR函数来获取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必须首先获取所有可用小时数,然后对时间表进行一次循环,并检查每个小时是否在可用小时数数组中

像这样的

$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 />';
    }
}

我认为这将产生渴望的结果:

$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 />';
    }

  }

问题是,你的查询可能容易受到Vadim的回答的攻击。这是正确的解决方案。我没有足够的学分,但这是解决方案。非常感谢你