为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
HUX布斯 2023-04-15 17:11:35
有没有办法同时增加 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-1end vacation: 5-1start: 1-1end: 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。有人可以指导我正确的方向吗?也许我做的完全错了,但我不知道更简单的解决方案。
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

你走在正确的轨道上。我改变了组织数据的方式,因此迭代它们更简单。


我还在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


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信