PHP中如何将变量与数组进行比较测试

4
我认为我应该使用in_array(),但由于某些原因它给出了不准确的信息。我查看了array_search()array_key_exists(),但似乎只有在我的数组中有键和值时才有用。简而言之,我正在运行一个条件来获取当前的EST时间和日期,并确定它是否是“工作时间”还是“非工作时间”。
所以现在是星期二晚上7点,这应该显示“非工作时间”,但它却输出“工作时间”,我错过了什么吗?
示例代码:
<?php

date_default_timezone_set('US/Eastern');
$current_time = date('A'); //AM or PM
$current_day = date('l'); // Sunday - Saturday
$current_hour = date('H'); // 08 / 24hr Time Format

$closed_days = array('Saturday','Sunday');

$closed_hours = array('17','18','19','20','21','22','23','00','01','02','03','04','05','06','07','08');
?>
<?php
echo $current_time . '<br />';
echo $current_day . '<br />';
echo $current_hour . '<br />';
//Operating Hours
if(!in_array($current_day, $closed_days) || !in_array($current_hour, $closed_hours)) {
    echo 'During Hours';
} else { 
    echo 'After Hours';
} ?>

正在返回:

PM
Tuesday
19
During Hours
3个回答

6

变更:

if(!in_array($current_day, $closed_days) || !in_array($current_hour, $closed_hours)) {

to

if(!in_array($current_day, $closed_days) && !in_array($current_hour, $closed_hours)) {

||代表“或”,因此该条件返回true,比如说今天是休息日但在你正常工作时间内。

&&代表“且”,需要两个条件语句都为真才能执行代码块。


这很有道理,那么如果是在营业时间之后的一天呢?我想要运行一些代码,如果是周一到周五的上午9点到下午5点之间,否则就做其他事情。我试图理解“OR”、“AND”逻辑。尽管我确定我错了,但我的大脑告诉我是“OR”。比如说,如果当前日期不等于周六或周日,“OR”当前小时不在关闭时间数组中。 - Derek
1
是的,因为必须同时满足两个条件。更新后的条件逻辑为:“如果当前日期不在关闭日期数组中且当前小时不在关闭时间数组中,则显示‘营业时间之后’”。 - James Taylor

1
我相信这很简单,只需要将你的if语句改为以下形式即可:

!in_array($current_day, $closed_days) || !in_array($current_hour, $closed_hours)

至:

!in_array($current_day, $closed_days) && !in_array($current_hour, $closed_hours)

使用 OR,表示只有一个条件需要为真。

-1

更改

if(!in_array($current_day, $closed_days) || !in_array($current_hour, $closed_hours)) {
  echo 'During Hours';
} else { 
     echo 'After Hours';
} 

if(in_array($current_day, $closed_days) || in_array($current_hour, $closed_hours)){
  echo 'After Hours';
}
else{
   echo 'During Hours';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接