有没有办法同时增加两个foreach循环?
我有2个数组:
$datum = new DateTime("now");
$jaar = date("y",strtotime('now'));
$maand = strftime("%B");
$vakanties_start = array(
"BeginKerst" => new DateTime("$jaar-01-01"),
"Voorjaar" => new DateTime("$jaar-02-22"),
"Mei" => new DateTime("$jaar-04-25"),
"Zomer" => new DateTime("$jaar-07-18"),
"EindKerst" => new DateTime("$jaar-12-21"),
"Test" => new DateTime("$jaar-05-20")
);
$vakanties_eind = array(
"BeginKerst" => new DateTime("$jaar-01-05"),
"Voorjaar" => new DateTime("$jaar-03-01"),
"Mei" => new DateTime("$jaar-05-03"),
"Zomer" => new DateTime("$jaar-08-30"),
"EindKerst" => new DateTime("$jaar-12-31"),
"Test" => new DateTime("$jaar-05-25")
);
假期的开始和假期的结束。我需要检查今天是否在那些日子之间。
我试图用2 foreach循环来检查它,但是比我将得到此错误: 开始休假:1-1 假期结束:5-1
开始:1-1 结束:3-1
等等。这显然不是我想要的方式,因为这意味着在第一个foreach结束时,假期在1-1和31-12之间。
我尝试过的另一件事是像这样验证数组的键:
foreach ($vakanties_start as $vakantie_start){
foreach ($vakanties_eind as $vakantie_eind){
if ($vakantie_start->format('Y-m-d') >= $datum->format('Y-m-d') && $vakantie_eind->format('Y-m-d') <= $datum->format('Y-m-d')){
if (key($vakantie_start) == key($vakantie_eind)){
echo $vakantie_start->format('Y-m-d') . "<br>" . key($vakanties_start) . "<br>";
echo $vakantie_eind->format('Y-m-d') . "<br>" . key($vakanties_eind) . "<br>";
}
}
}
}
但这会使代码仅显示1-1至5-1日期。有人可以指引我正确的方向吗?也许我做错了,但我不知道该怎么做
You can use the
$key => $value
version of aforeach
statement on$vakanties_start
and use that key to access the corresponding value in$vakanties_eind
:产出(截至2020-05-24):
Note that you had an error in your code, you were comparing for
start>=today && today>=end
where you should havestart<=today && today<=end
. Also it's more efficient to make$datum
formatted from the beginning instead of formatting it every time through the loop.Demo on 3v4l.org
您在正确的轨道上。我更改了您组织数据的方式,因此遍历数据更加简单。
I also used
DateTime()
objects in my comparison because they are comparable. No need to format them as a string first.输出量
Demo