【问题标题】:PHP not iteratingPHP没有迭代
【发布时间】:2021-07-05 10:26:23
【问题描述】:

我有一个给定元素的数组:

date_default_timezone_set("UTC");
$DateNow = date("d/m/Y H:i", time());
$tommorowUnix = strtotime("+1 day");
$tommorowAfterUnix = strtotime("+2 day");
$holidays = array("30 October 2021",
"31 October 2021",
"01 November 2021",
"02 November 2021",
"11 November 2021",
"12 October 2021",
"25 December 2021",
"26 December 2021",
"27 December 2021",
"1 January 2022",
"2 January 2022");

然后,我有一个函数,将给定的$date 与数组进行比较,如果发现为真则返回:


foreach($holidays as &$value)
{
    $value = strtotime($value);
}

function isNextDayWeekend($date)
{
    $weekDay = date('w', $date);
    echo($weekDay);
    if($weekDay == 0 || $weekDay == 6)
        return true;
    else
        return false;   
}

function isNextDayHoliday($date)
{
    $returnVal = false;
    foreach ($holidays as $holidayDay)
    {
        echo ("test");
        if($date == $holidayDay) { $returnVal = true; }     
    }
    return $returnVal;
}
$check1 = isNextDayHoliday(strtotime("12 October 2021"));
echo $check1 ? 'true' : 'false';

很遗憾,连echo ("test") 都没有显示出来。

@EDIT:解决了上述情况。 $holidays 范围是个问题。尽管如此,它仍然给了我不好的价值观:

function isNextDayHoliday($date,$holidays)
{
    $returnVal = false;
    foreach ($holidays as $holidayDay)
    {
        if($date == $holidayDay) {$returnval = true;}   
        echo "Checking ".$date." vs. ".$holidayDay." = ";
        echo $returnVal ? "true" : "false"."<br/>";
    }
    return $returnVal;
}
$check1 = isNextDayHoliday(strtotime("12 October 2021"),$holidays);
echo $check1 ? "true" : "false";
Checking 1633996800 vs. 1635552000 = false
Checking 1633996800 vs. 1635638400 = false
Checking 1633996800 vs. 1635724800 = false
Checking 1633996800 vs. 1635811200 = false
Checking 1633996800 vs. 1636588800 = false
**Checking 1633996800 vs. 1633996800 = false**
Checking 1633996800 vs. 1640390400 = false
Checking 1633996800 vs. 1640476800 = false
Checking 1633996800 vs. 1640563200 = false
Checking 1633996800 vs. 1640995200 = false
Checking 1633996800 vs. 1641081600 = false
false

【问题讨论】:

标签: php loops date foreach


【解决方案1】:
function isNextDayHoliday($date)
{
    $returnVal = false;
    foreach ($holidays as $holidayDay)
    {
        echo ("test");
        if($date == $holidayDay) { $returnVal = true; }     
    }
    return $returnVal;
}

你需要将$holidays传递给这个函数,这个函数不知道holidays是什么。

你可以全局声明,然后就可以使用了。

你来优化一下。 if($date == $holidayDay) return true; 以便在您找到它后立即停止处理。

【讨论】:

  • 您的第一个参数是 strtotime("12 October 2021"),这是 unix 时间戳,而您的假期数组有字符串.. @MateuszŻymła
  • 我猜这是范围的另一个问题,这次是 foreach 循环:foreach($holidays as &$value) {$value = strtotime($value);} 因为引用应该编辑原始数组?
  • 我可以看到,它正在打印值。我测试了上述方法并将其称为echo isNextDayHoliday("2 January 2022", $holidays);,它返回true @MateuszŻymła
  • 复制粘贴此@MateuszŻymła &lt;?php $holidays = array("30 October 2021", "31 October 2021", "01 November 2021", "02 November 2021", "11 November 2021", "12 October 2021", "25 December 2021", "26 December 2021", "27 December 2021", "1 January 2022", "2 January 2022"); function isNextDayHoliday($date, $holidays) { $returnVal = false; foreach ($holidays as $holidayDay) { echo ("test"); if($date == $holidayDay) { return true} } return $returnVal; } echo "printing &lt;Br&gt; "; echo isNextDayHoliday("2 January 2022", $holidays);
  • 我什至尝试添加 $holidays = array(strtotime("30 October 2021"), strtotime("31 October 2021"), strtotime("01 November 2021") 等等(即使它违反了 DRY 概念),它仍然不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多