2011-03-23 56 views
0
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[]PHP:循環,陣列和排序

你會如何做到這一點?

回答

1

我老闆很驚訝我每次都用$theEvents[]。你會如何做到這一點?

我會這麼做......就是這樣,實際上。該代碼看起來相對簡單,直截了當,完全毫不含糊。這有點冗長(你可以將它壓縮成一個單一的if檢查),但它的目的很詳細,而且非常清楚。

老闆的擔心是什麼?

+0

我可以在一個單一的,如果這樣做,實際上。但是我會保留我的代碼,你說得對,這很容易。我的老闆只是對角地看着。 – 2011-03-23 03:24:18

+0

確保看看這裏發佈的其他示例。通過適當的格式化,在單個「if」中執行此操作可能與您當前的代碼一樣清晰。它可能不會更好,但是,瞭解替代品總是很好的。 – Charles 2011-03-23 03:30:01

+0

你又合適了。 – 2011-03-23 03:32:18

1

由於您的所有條件分支都會導致相同的語句,因此可以將它寫爲一個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; 
    } 
2

也許代碼應該看起來像這樣。

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; 
} 
+0

我喜歡從條件分配技術,這是一個很好的例子。 – Charles 2011-03-23 03:30:34

+0

謝謝@Charles,我喜歡乾淨漂亮的代碼。 – Whirlpool 2011-03-23 21:42:45

0

根據惠而浦的響應:

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; 
}