PHP - 检查数组中是否存在变量,更新它并再次检查

时间:2018-05-16 14:07:53

标签: php arrays loops

我正在建立一个交付日期系统,其概念非常简单;它会根据一系列假日日期,一些其他变量检查当前日期,如果需要,还会增加1天,如下所示:

int daysInCurrentMonth = java.time.LocalDate.now().lengthOfMonth();

所以我的问题是假期;我想获取变量$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数组进行检查。如果它存在,我想'添加+1天'并再次检查。

因此,例如,如果5月1日,2日和3日是假期,$allHolidays将在5月1日检查之前,它会看到5月1日在$deliveryDate数组中,然后更新' +1天到5月2日,再次检查。仍然在阵列?再添加一天。直到结果将是5月4日。

$allHolidays

这是我现在的代码。它只检查一次。如何在此检查中更新变量,并再次检查?我有强烈的感觉,我需要使用if (in_array($deliveryDate, $allHolidays)) { $deliveryDate = date("j-F-Y", strtotime($ddate. "+1 day")); } for循环,但我不知道如何构造它们。我尝试在整个循环中包装整个代码,但还没有运气。

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

while

1 个答案:

答案 0 :(得分: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