【问题标题】:Remove dates in the past in php array? [duplicate]在php数组中删除过去的日期? [复制]
【发布时间】:2020-03-12 21:17:07
【问题描述】:

正在努力解决这个问题......

$dates_list 输出这个数组

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [event_date] => 2020-11-19 00:00:00
                    [event_start_time] => 13:07:00
                    [event_end_time] => 17:07:00
                )

            [1] => Array
                (
                    [event_date] => 2020-06-17 00:00:00
                    [event_start_time] => 10:07:00
                    [event_end_time] => 17:07:00
                )

            [2] => Array
                (
                    [event_date] => 2020-03-05 00:00:00
                    [event_start_time] => 15:46:00
                    [event_end_time] => 20:46:00
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [event_date] => 2020-07-07 00:00:00
                    [event_start_time] => 20:10:00
                    [event_end_time] => 20:10:00
                )

            [1] => Array
                (
                    [event_date] => 2020-03-13 00:00:00
                    [event_start_time] => 20:10:00
                    [event_end_time] => 20:10:00
                )

        )

)

我创建了$now,它显示了当前的日期和时间

$now = date("Y-m-d h:i:s");
// 2020-03-12 09:17:42

@RoboRobok 提供了这个答案,当数组没有嵌套时它可以工作

$dates_filtered = array_filter($dates_list,
            function ($date_entry) use ($now) {
                return $date_entry['event_date'] >= $now;
            }
        );

如何访问嵌套数组以从数组中删除过去的日子?

【问题讨论】:

标签: php arrays


【解决方案1】:

使用array_filter:

$result = array_filter(
    $dates_list,
    function ($date_entry) use ($now) {
        $date = substr($date_entry['event_date'], 0, 10);
        $time = $date_entry['event_start_time'];

        return "$date $time" >= $now;
    }
);

【讨论】:

  • 谢谢!如果它也可以考虑时间,它可能会很有用。
  • 更新为使用event_start_time
  • 大声笑。为什么这个被接受的答案?如何使用 substr 作为日期?如果日期格式不同,此代码将不起作用。
  • @RafiqueMohammed 我相信有时做出安全的假设很重要。这是其中一种情况。大多数数据库系统都以这种格式存储它们的日期时间,并且可以假设这是要使用的格式。请记住,因为我假设您是非常年轻的程序员 - 有时简单是要走的路,但您肯定需要小心。另一件事 - 有时假设会使您的代码更安全,因为您在解析某些内容时会出错,而不是允许多种格式。您的数据可能有更多的客户,因此格式越一致越好。
【解决方案2】:

试试这个

foreach($dates_list as $i=>$dateItem){
   if (strtotime($dateItem['event_date']) < time()) {
    // past date
    unset($dates_list[$i]);
}

}
print_r($dates_list);

【讨论】:

  • 谢谢,这可行,但print_r($dates_list); 显示所有foreach 循环。只有最后一个循环显示删除了过去日期的数组@Robo Robok 答案仅输出删除了过去日期的数组。
  • @StephenMeehan 我只是在没有测试的情况下输入了代码。多次打印的原因是因为我在 {..} 括号内添加了 print_r。我已经更新了代码。数组 $dates_list 将有更新的日期,没有过去的日期。我想知道你是怎么想出来的? print_r 用于打印数组。我添加它是为了演示。
  • 反对票毫无意义。该人应添加拒绝投票的原因。
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 2020-02-15
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
相关资源
最近更新 更多