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-statement 不会针对其他cases 进行测试,而是因为您使用单独if的 s,而不是if-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 回答