2011-03-02 5 views
0

私はorが入っているifのステートメントを持っています。これは、この単純なIF OR文を実行する方法ですか?

すなわち

if($count == 1 || $count == 3 || $count == 7) { 
    // do stuff 
} 

私はちょうど好奇心が強い - これは、これを行うための最良の方法ですか?上記の単純な例では、これを行うより速い方法がありますか?あれば、それは何ですか?

+0

高速コードを要求する場合、このコードに関連してパフォーマンス上の問題がありますか? –

+0

パフォーマンス上の問題はなく、同じ目的を達成するためのショートカットがあるかどうかは不思議です。そこに10個のステートメントがある場合、それはちょっと長く繰り返している可能性があります。 – willdanceforfun

答えて

3

コードは正常に動作します。代わりに、あなたは少しクリーナーで、スケールin_array()を、使用することができ、より良い:

if (in_array($count, array(1,3,7))) { ... } 
+2

実際、これは元の例よりも約4倍遅いです。私のサーバー上では116msと449msが100万回実行されています...それははるかにクリーンで可読です。少量のデータでは、速度はごくわずかです。大きなものでは、in_arrayのパフォーマンスは非常に遅いです。 – Sergey

+1

@Sergeyまあ、このようなケースは決して大規模な配列に遭遇しないようですね。 –

+0

あなたがそこに100万点のアイテムを張っているなら、それは間違っている。 –

1

あなたは、アレイ内のすべての可能な値を代入し、array_search機能

$array=array(1,3,7); 

if (array_search($count,$array) !== FALSE) 
{ 
    //do stuff 
} 
3

あなたが書いたコードを使用して確認することができます結構です。 Paul Schreiberによれば、ちょっとばかりいろいろなオプションがあります。

考えてみてください(これは単なる例に過ぎません)。なぜあなたがチェックしている値が重要なのでしょうか。彼らはすべてあなたがチェックしている共通のいくつかのプロパティを持っていますか?そうであれば、記号的にプロパティを記述すると、誰かがコードを理解しやすくなります。たとえば:

if (is_odd($x) && $x < 10) { 
    //... 
} 

ではなく

if ($x == 1 || $x == 3 || $x == 5 || $x == 7 || $x == 9) { 
    //... 
} 

は、これは非常に不自然な例ですが、うまくいけば、あなたは私が取得していますかを参照してください。

より具体的な例として、代わりのようなものやっての

:あなたがしたいかもしれません

if ($user->age > 65 
    || $user->years_of_custom > 3 
    || $num_items > 5) { 
     // Give this user a discount .... 
} 

を:

if (eligible_for_discount($user, $num_items)) { 
    // Give this user a discount 
} 

あなたはこれだけはできる、この一箇所で関数を使用する場合でも、コードの読みやすさを向上させます。明らかに、あなたは判断を下す必要があります。なぜなら、保守すべきコード行が増えてしまうために読みやすさが増しているからです。常に適切な選択であるとは限りません。条件がお互いに関係がない場合、それらを別々の関数にバインドすることは意味をなさないかもしれませんし、コードを難しくするのではなく、簡単にすることができます。コードが実際に意味するものと、人間がそれをどのように理解するべきかに焦点を合わせます。

+0

+よく考えて – codercake

+0

ありがとう。私はis_odd関数があることを知らなかった。 – willdanceforfun

0

switchステートメントが優れていませんか?

switch ($count) { 
    case 1: 
    case 3: 
    case 7: 
    echo "do stuff"; 
    break; 
} 
+0

1,3,7とこれらすべての値が動的である場合、変数または配列でどのようにswitch文を変更できますか? – Daric

関連する問題