按n个日期订购商品,并获取最接近今天的商品

时间:2011-05-01 19:27:39

标签: php sorting date

我有一个显示活动的网站;每个事件可以有x个日期(没有限制)。 我需要在主页面上显示最接近今天日期的事件。

这应该是一个明智的选择,但由于某些原因它不起作用。任何帮助将不胜感激。

所以这是我选择主要事件的功能。事件先前已从数据库中提取,链接日期存储在关键字“日期”下。它们通过参数“$ events”传递给函数。 每个日期都是(int)unix日期。

function getMainEvent(&$events){
    $today = time();
    $currentEvent = end($events); //selecting the last entered event (most likely to be the main event)
    $currentEventLast = max($currentEvent['dates']); //selecting the highest date linked to that event
    foreach($events as $k=>&$event){ //looping through events
        $date = min($event['dates']); //selecting the lowest date for the current event
        if($date>$today && $date<$currentEventLast){
        //if $date is higher than today (so it's not in the past), but lower than main event's date...
            $currentEvent = &$event; //make that event the main event
            $currentEventLast = max($currentEvent['dates']); //select the latest date of that event
        }
    }
    return $currentEvent;
}

1 个答案:

答案 0 :(得分:0)

此算法似乎存在许多问题。

  • 在函数开始时(循环之前),将$currentEventLast设置为“最后输入事件”的最高日期。如果“最后输入的事件”仅包含过去的日期会怎样?
  • 在每次循环中,您将$date设置为当前事件的最低日期。如果该日期是过去会发生什么?
  • 每次通过循环时,如果if条件为真,则将$currentEventLast设置为当前事件的最新日期。但是,您不应该将其设置为您在if条件下考虑的日期吗?
  • 不是一个至关重要的问题,但是:如果活动的日期是今天的日期,会发生什么?变量$time包含时间戳。如果是午夜过了一秒钟,那么今天发生的事件将由您的职能“过去”判断。