7

コードしか思いつきません。switch ステートメントに変更したい if ステートメントが多すぎますが、ロジックが見つかりません。

現時点で私は持っています:

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...

しかし、どうすればスイッチ内で同じことを達成できますか?

4

3 に答える 3

11
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;
}

これは、独自のソリューションとは少し異なることに注意してください。以前のステートメントが既に一致している場合、switchステートメントは他の s に対してテストされませんが、代わりに別の sを使用するため、常にすべてのケースに対してテストする場合です。caseifif-else

于 2011-07-14T10:08:55.983 に答える
11

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

$patterns = array('texttosearch', 'texttosearch1', 'texttosearch2');
foreach ($patterns as $pattern) {
    if (strstr($var, $pattern)) {
        echo "String contains '$pattern'\n";
    }
}
于 2011-07-14T10:10:38.793 に答える
2

逆の方法で行うことができます:

switch(true) {
case strstr($var, "texttosearch"):
    // do stuff
    break;
case strstr($var, "texttosearch1"):
    // do other stuff
    break;
}
于 2011-07-14T10:07:58.010 に答える