【问题标题】:Using strstr inside a switch php在 switch php 中使用 strstr
【发布时间】:2011-10-05 05:02:51
【问题描述】:

我只是想不出代码。我有太多的 if 语句要更改为 switch 语句,但我找不到逻辑。

目前我有:

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 中实现同样的效果呢?

【问题讨论】:

  • 其实foreach解决方案php-coder更好用switch。它将减少代码行。

标签: php switch-statement strstr


【解决方案1】:
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 进行测试,如果之前已经匹配,而是因为您使用单独的 ifs,而不是如果if-else 你的方式总是针对每个案例进行测试。

【讨论】:

    【解决方案2】:

    我认为您无法使用switch(比现在更优雅)实现此目的,因为它比较值但您只想比较部分值。相反,您可以使用循环:

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

    【讨论】:

    • 绝对+1。确实。如果可以的话,我会给你 +2。
    • 更好地回答这个案例+1,但@KingCrunch sn-p 对于实现特定操作很有趣。
    【解决方案3】:

    你可以反过来做:

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

    【讨论】:

    • @William Jones 你能不能在公共场合避免这样的言论,技术讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2021-05-08
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多