【问题标题】:Removing expired dates from an array with PHP使用 PHP 从数组中删除过期日期
【发布时间】:2014-01-31 12:12:22
【问题描述】:

我有一个格式为“m/d/Y”(月/日/年)的日期数组:

$array = array(

'1/10/2014',
'1/11/2014',
'1/12/2014',
'1/13/2014',
'1/14/2014'
);

我想输出只有今天或未来日期的数组。因此,如果今天是 2014 年 1 月 12 日,它将消除 2014 年 1 月 10 日和 2014 年 1 月 11 日。

这是我所拥有的不起作用的:

foreach ($array as $date) {

 $unixdate = strtotime($date);

 if ($unixdate < time()) {

 unset($array[$date]);

 }

}

print_r($array);

我想我没有正确使用unset,因为它会打印整个数组?

【问题讨论】:

  • $data 不是数组索引

标签: php arrays date unset


【解决方案1】:

我建议您查看array_filter()。此外,您还想使用今天 12:00:00 的日期进行比较,而不是当前时间。

$array = array(
    '1/10/2014',
    '1/11/2014',
    '1/12/2014',
    '1/13/2014',
    '1/14/2014'
);

$array = array_filter($array,function($date){
    return strtotime($date) >= strtotime('today');
});

print_r($array); //Array ( [2] => 1/12/2014 [3] => 1/13/2014 [4] => 1/14/2014 )

*注意:匿名函数需要 PHP 5.3

【讨论】:

    【解决方案2】:

    试试

    foreach ($array as $key => $date) {
    
     $unixdate = strtotime($date);
    
     if ($unixdate < time()) {
    
     unset($array[$key]);
    
     }
    
    }
    
    print_r($array);
    

    【讨论】:

    • 看起来它正在工作!但它今天(1/12/14)也将被删除。可能是 if 语句的问题,但有什么想法吗?
    • @ErikBerger 使用 strtotime('today') 而不是 time() 进行比较(来自 koala_dev 的回答)
    【解决方案3】:

    foreach ($array as &$date) Hi 使用引用调用和 $date = NULL;在循环中

    foreach ($array AS $key => $date) {
    
     $unixdate = strtotime($date);
    
     if ($unixdate < time()) {
    
        unset($array[$key]);
    
     }
    
    }
    

    如果您想完全删除这些条目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多