【问题标题】:PHP : Loops, arrays and sortingPHP:循环、数组和排序
【发布时间】:2011-03-23 02:53:29
【问题描述】:
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 arrays function loops time


    【解决方案1】:

    也许代码应该是这样的。

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

    【讨论】:

    • 我喜欢条件赋值技术,这是一个很好的例子。
    【解决方案2】:

    我的老板很惊讶我每次都使用$theEvents[]。你会怎么做呢?

    我会这样做...实际上就是这样。该代码似乎相对简单、直接且完全明确。它有点冗长(您可以将其浓缩为一个 if 检查),但它出于某种目的而冗长并且非常清楚。

    你的老板有什么顾虑?

    【讨论】:

    • 实际上,我可以一次完成。但我会保留我的代码,你是对的,它更容易。我的老板只是斜着看。
    • 请务必查看此处发布的其他示例。使用正确的格式,在单个 if 中执行此操作可以与您当前的代码一样清晰。请注意,它可能没有任何更好,但知道替代方案总是好的。
    【解决方案3】:

    由于所有条件分支都指向同一个语句,因此可以将其编写为一个 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;
        }
    

    【讨论】:

      【解决方案4】:

      根据惠而浦的回应:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多