嵌套的 foreach 增加两个索引/检查日期是否在 2 个数组之间

有没有办法同时增加 2 个嵌套的 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 循环来检查,但我会得到这个错误:


start vacation: 1-1

end vacation: 5-1


start: 1-1

end: 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。有人可以指导我正确的方向吗?也许我做的完全错了,但我不知道更简单的解决方案。


HUX布斯
浏览 104回答 1
1回答

慕沐林林

你走在正确的轨道上。我改变了组织数据的方式,因此迭代它们更简单。我还在DateTime()比较中使用了对象,因为它们具有可比性。无需先将它们格式化为字符串。$jaar = date('Y');$vakanties = [    'BeginKerst' => [        'start' => new DateTime("$jaar-01-01"),        'end'   => new DateTime("$jaar-01-05"),    ],    'Voorjaar' => [        'start' => new DateTime("$jaar-02-22"),        'end'   => new DateTime("$jaar-03-01"),    ],    'Mei' => [        'start' => new DateTime("$jaar-04-25"),        'end'   => new DateTime("$jaar-05-03"),    ],    'Zomer' => [        'start' => new DateTime("$jaar-07-18"),        'end'   => new DateTime("$jaar-08-30"),    ],    'EindKerst' => [        'start' => new DateTime("$jaar-12-21"),        'end'   => new DateTime("$jaar-12-31"),    ],    'Test' => [        'start' =>  new DateTime("$jaar-05-20"),        'end'   => new DateTime("$jaar-05-25"),    ],];$now = new DateTime();foreach ($vakanties as $name => $vakanty) {    if ($now >= $vakanty['start'] && $now <= $vakanty['end']) {        echo "today is in the middle of a vacation: " . $name;    }}输出today is in the middle of a vacation: Test
打开App,查看更多内容
随时随地看视频慕课网APP