2011-03-23 43 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; 
}