【问题标题】:PHP - check if variable exists in array, update it and check againPHP - 检查数组中是否存在变量,更新它并再次检查
【发布时间】:2018-10-26 15:24:23
【问题描述】:

我正在构建一个概念上非常简单的交货日期系统;它会根据一组假日日期、一些其他变量检查当前日期,并在需要时添加 1 天,如下所示:

$currentDate = date('d-m-Y');
$deliveryDate = date('d-m-Y', strtotime($currentDate, '+1 day');
$allHolidays = array('01-05-2018', '02-05-2018', '03-05-2018');


if ($outOfStock) {
  $deliveryDate = date('d-m-Y', strtotime(currentDate, '+2 days');
}

[..and so on ]

return $deliveryDate;

所以我的问题是关于假期的;我想获取变量$deliveryDate 并对照$allHolidays 数组检查它。如果存在,我想“添加 +1 天”并再次检查。

例如,如果 5 月 1 日、2 日和 3 日是假期,而 $deliveryDate 在检查之前是 5 月 1 日,它将看到 5 月 1 日在 $allHolidays 数组中,然后更新“+1 天”到5月2日,再次检查。还在阵中?再加一天。直到结果是 5 月 4 日。

if (in_array($deliveryDate, $allHolidays)) {
    $deliveryDate = date("j-F-Y", strtotime($ddate. "+1 day"));
}

这是我现在拥有的代码。它只检查 1 次。如何更新此检查中的变量并再次检查?我有一种强烈的感觉,我需要使用forwhile 循环,但我不知道如何构造它们。我尝试将整个代码包装在一个while循环中,但还没有运气。

编辑:使用 do-while 循环可以工作,但我如何让它识别更新的变量?如果我更新它在do中的while逻辑中使用的变量,它如何正确循环?

do {
   $deliveryDate = date("j-F-Y", strtotime($deliveryDate. "+1 day"));
} while (in_array($deliveryDate, $allHolidays)

【问题讨论】:

  • do-while 可能是您想要的?
  • @Script47 ;我想会,但我不知道“While”语句是什么。
  • 在增加日期时跳过假期这一主题已有预先存在的 StackOverflow 页面。你有没有好好环顾四周?
  • @mickmackusa 在我开始研究之前,我确实看到了这些确切的主题。没有检查他们是否有这个特定问题。感谢您的输入,将再次通过它们

标签: php arrays loops


【解决方案1】:

我已经为你准备了一个演示。

我添加了一些“技巧”来使用$outOfStock 布尔值来适当地增加天数。通过将其添加到1,布尔值被类型转换为int 值。 true 变为 1false 变为 0

其余的应该是不言自明的...初始化$deliveryDate,1 或 2 天调整它,然后调整它直到它不再属于列出的假期。

代码:(Demo)

$outOfStock = true;
echo date('d-m-Y') , "\n";  // as baseline

$deliveryDate = date('d-m-Y', strtotime('+' . 1+$outOfStock . ' day'));  // treat bool as int: instock=1, outofstock=2
echo $deliveryDate , "\n";  // as proof

$allHolidays = array('17-05-2018', '18-05-2018', '19-05-2018');
while(in_array($deliveryDate,$allHolidays)){
    $deliveryDate = date('d-m-Y', strtotime("$deliveryDate +1 day"));
}
echo $deliveryDate;

输出:

16-05-2018
18-05-2018
20-05-2018

【讨论】:

  • 谢谢你!您的演示准确地展示了我想要实现的目标。为什么我的带有 while 循环的相同代码不起作用,我认为它在标记的细节中。明天我会仔细检查代码,看看我能学到什么。无论如何,您都会因提供有效的答案而获得积分! :D
  • 乍一看可能是j-F-Y。比较苹果和橙子。或者strtotime() 误解了j-F-Y
  • 忘记评论了;症结在于strtotime 语法;我试图将变量与$delDate . "+2 days" 之类的点组合起来,但它应该全部用"$delDate + 2 days" 之类的引号括起来。再次感谢伙计!
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多