PHP: циклы, массивы и сортировка - PullRequest
0 голосов
/ 23 марта 2011
public function getAllEventsByDate($allEvents, $date) {
    $theEvents = array();

    foreach ($allEvents as $event) {
        if ($date == 'future' && $event['start'] > time())
            $theEvents[] = $event;
        else if ($date == 'past' && $event['stop'] < time())
            $theEvents[] = $event;
        else if ($date == 'current' && $event['start'] < time() &&
        $event['stop'] > time())
            $theEvents[] = $event;
    }

    return $theEvents;
}

Мой босс удивился, что я использую каждый раз $theEvents[].

Как бы вы это сделали?

Ответы [ 4 ]

2 голосов
/ 23 марта 2011

Может быть, код должен выглядеть следующим образом.

public function getAllEventsByDate($allEvents, $date) {
    $theEvents = array();

    foreach ($allEvents as $event) {
        $condition =
            ($date == 'future'  && $event['start'] > time()) ||
            ($date == 'past'    && $event['stop']  < time()) ||
            ($date == 'current' && $event['start'] < time() &&
                                   $event['stop']  > time())
        ;

        if ($condition) {
            $theEvents[] = $event;
        }
    }

    return $theEvents;
}
1 голос
/ 23 марта 2011

Поскольку все ваши условные ветви приводят к одному и тому же утверждению, его можно записать как одно выражение if (см. Ниже).

public function getAllEventsByDate($allEvents, $date) {
    $theEvents = array();

    foreach ($allEvents as $event) {
        if (
             ( ($date == 'future') && ($event['start'] > time()) ) ||
             ( ($date == 'past') && ($event['stop'] < time()) ) ||
             ( ($date == 'current') && ($event['start'] < time()) && ($event['stop'] > time()) )
           ) {
                 $theEvents[] = $event;
             }

        return $theEvents;
    }
1 голос
/ 23 марта 2011

Мой босс удивился, что я использую каждый раз $theEvents[]. Как бы вы это сделали?

Я бы сделал это ... просто так, на самом деле. Этот код кажется относительно простым, понятным и совершенно однозначным. Это немного многословно (вы можете сжать его в один if чек), но оно многословно для определенной цели и очень ясно.

Что беспокоит вашего босса?

0 голосов
/ 23 марта 2011

На основании ответа Whirlpool:

public function getAllEventsByDate($allEvents, $date) {
    $theEvents = array();

    $condition1 = ($date == 'future'  && $event['start'] > time());
    $condition2 = ($date == 'past'    && $event['stop']  < time());
    $condition3 = ($date == 'current' && $event['start'] < time()
                                      && $event['stop']  > time());

    foreach ($allEvents as $event)
        if ($condition1 || $condition2 || $condition3)
            $theEvents[] = $event;

    return $theEvents;
}
...