Упорядочить элементы по n числам и выбрать ближайший к сегодняшнему дню - PullRequest
0 голосов
/ 01 мая 2011

У меня есть сайт, который отображает события; Каждое событие может иметь х количество дат (без ограничений). Мне нужно отобразить на главной странице событие, наиболее близкое к сегодняшней дате.

Это должно быть легко, но по какой-то причине это не работает. Любая помощь будет оценена.

Итак, вот моя функция, которая выбирает главное событие. События были предварительно извлечены из БД со связанными датами, хранящимися под ключом «даты». Они передаются функции через аргумент «$ events». Каждая дата указывается как (int) unix date.

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 голосов
/ 01 мая 2011

Похоже, у этого алгоритма есть ряд проблем.

  • В начале функции (перед циклом) вы устанавливаете $currentEventLast как самую высокую дату «последнего введенного события». Что произойдет, если «последнее введенное событие» имеет только даты, которые были в прошлом?
  • При каждом прохождении цикла вы устанавливаете $date как самую низкую дату текущего события. Что произойдет, если эта дата в прошлом?
  • При каждом прохождении цикла, если условие if выполняется, вы устанавливаете $currentEventLast в качестве самой последней даты текущего события. Но не следует ли вам установить ее в качестве даты, которую вы только что рассматривали в условии if?
  • Не решающая проблема, но: что произойдет, если дата события будет сегодняшней? Переменная $time содержит метку времени. Если это одна секунда после полуночи, то события, происходящие сегодня, будут оцениваться «в прошлом» по вашей функции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...