2017-01-03 31 views
1

我需要检查,如果一个事件有一个报价,我有此功能检查功能,如果事件有接受报价?

public function hasAcceptedOffer() 
{ 
    foreach ($this->offers as $offer) { 

     if($offer->accepted == 1){ 
     return true; 

    } else { 

     return false; 

    } 
} 

但我认为这是可以变得更好,更优化。因为如果有很多优惠我不想全部通过。我想要的是,如果一个函数发现一个被接受的报价,它应该停止进一步的迭代。

+0

我觉得你做得很好。该功能将返回,如果它找到了接受的报价。请注意,您的“if”语句有错误。你错过了{ – carmel

+0

有没有休息;选项在PHP?我怎么能打破迭代? – lewis4u

+0

您可以通过接受的方式对'$ this-> offers'进行排序,那么您只能检查第一个元素 –

回答

3

我想你在这里做得很好。

你可以这样做

public function hasAcceptedOffer() 
{ 
    foreach ($this->offers as $offer) { 

     if($offer->accepted == 1){ 
      return true; 

     } 
    } 
    return false; 
} 
+1

你的答案完全正确+1。 –

+1

@ lewis4u这是完全错误的逻辑。我提出了你的问题,因为你向我们展示了一些代码,并以正确的方式提出你的问题。不用于标记目的。谢谢 –

+0

@ lewis4u你可以去任何一个。我没有问题 –

1

假设你只有任何提议被接受照顾除去其他部分,你不需要知道哪一个,我喜欢做这样的:

public function hasAcceptedOffer() 
{ 
    foreach($this->offers as $offer) { 
     if($offer->accepted !== 1) 
      continue; 

     return true; 
    } 

    return false; 
} 

循环的每次迭代将迅速跳到下一个,如果它不符合您的期望的标准,它会立即返回,当它找到的第一个积极的结果,并跳过处理其他(因为你不反正也不在乎)如果找不到匹配则返回false。

如果要收集被接受的报价,你可以修改它,如下所示:

public function getAcceptedOffers() 
{ 
    $results = array(); 

    foreach($this->offers as $offer) { 
     if($offer->accepted !== 1) 
      continue; 

     $results[] = $offer; 
    } 

    return $results; 
} 
+0

@ carmel的答案稍微更有效率,更符合OP的陈述用例,但是我认为它相关也分享了我发现在用例变得更加复杂时我发现有效的方法。 – thewildandy