2011-07-14 5 views
4

私はちょうどコードを考えることができません。私はスイッチのステートメントに変更したいステートメントがあれば、あまりにも多くのウェイを持っていますが、私はロジックを見つけることができません。スイッチ内のstrstrの使用

if(strstr($var,'texttosearch')) 
    echo 'string contains texttosearch'; 

if(strstr($var,'texttosearch1')) 
    echo 'string contains texttosearch1'; 

if(strstr($var,'texttosearch2')) 
    echo 'string contains texttosearc2h'; 

//etc etc... 

しかし、どのように私はスイッチ内の同じことを達成することができます:私が持っている瞬間

?場合switch -statementは、他のcase Sに対してテストしませんので、これは、独自のソリューションにわずかに異なっていることを

switch(true) { 
case strstr($var, "texttosearch"): 
    // do stuff 
    break; 
case strstr($var, "texttosearch1"): 
    // do other stuff 
    break; 
} 
+0

実際には、 'php-coder 'による' foreach'ソリューションが 'switch'を使う方が良いです。それはコードの行を減らすでしょう。 – jeni

答えて

9
switch (true) { 
    case strstr($var,'texttosearch'): 
    echo 'string contains texttosearch'; 
    break; 
    case strstr($var,'texttosearch1'): 
    echo 'string contains texttosearch1'; 
    break; 
    case strstr($var,'texttosearch2'): 
    echo 'string contains texttosearc2h'; 
    break; 
} 

注:

2

あなたはそれを他の方法で回避を行うことができます以前はすでに一致していますが、別のifを使用しているため、if-elseの場合は常にすべてのケースに対してテストが行​​われます。

+0

あなたはタイプミスをしています:) – red

+0

@William Jonesさんは、このような言葉をパブリックに、つまり技術的な議論に避けることができます。 – jeni

10

私はそれが値を比較するので、あなたがswitch(今よりももっとエレガント)でこれを達成することができないと思いますが、あなたは、値の一部だけを比較します。代わりに、ループを使用することができます:

$patterns = array('texttosearch', 'texttosearch1', 'texttosearch2'); 
foreach ($patterns as $pattern) { 
    if (strstr($var, $pattern)) { 
     echo "String contains '$pattern'\n"; 
    } 
} 
+1

間違いなく+1。絶対に。もし私ができるなら、私はあなたに+2を与えるだろう。 – cwallenpoole

+0

このケースの方が良い答えですが、@ KingCrunchスニペットは特定のアクションを実現するのに面白いです。 – Mike

関連する問題