2017-01-03 3 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の答えは少し効率的で、ユースケースがもう少し複雑になったときに有効であることがわかったメソッドを共有することも適切だと思いました。 – thewildandy

関連する問題