我需要检查一个事件是否有要约,我已经完成了这个功能
public function hasAcceptedOffer()
{
foreach ($this->offers as $offer) {
if( $offer->accepted == 1 ){
return true;
} else {
return false;
}
}
但我认为这可以做得更好,更优化。因为如果有很多优惠我不想全部通过。我想要的是,如果一个函数找到一个被接受的商品,它应该停止进一步的迭代。
答案 0 :(得分:3)
我觉得你在这里做得很好。
您可以通过执行此操作删除其他部分
public function hasAcceptedOffer()
{
foreach ($this->offers as $offer) {
if( $offer->accepted == 1 ){
return true;
}
}
return false;
}
答案 1 :(得分: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;
}