如何使用PHP switch语句来检查字符串是否包含单词(但也可以包含其他单词)?

我正在使用PHP开关来包含基于页面URL参数中传递的传入关键字的某些文件。

例如,该 URL 可以是:...page.php?kw=citroen%20berlingo%20keywords

在页面内部,我想使用这样的东西:

<?
    switch($_GET['kw']){

        case "berlingo":     
            include 'berlingo.php'
            break;
        case "c4":
            include 'c4.php';
            break;

    } 
?>

在第一种情况下,我想做的是,如果关键字参数包含 ,则包含文件,但它不必完全是该关键字。berlingo.phpberlingo

例如,如果关键字是 ,则我想包含该文件,但如果它是 .berlingo.phpberlingocitroen berlingo

如何使用 PHP 大小写选择(switch 语句)评估给定字符串是否包含值?

谢谢。


答案 1

基于这个问题这个答案,我想出的解决方案(同时仍然使用案例选择)如下。

您可以使用 stristr() 或 strstr()。我选择在这种情况下使用的原因仅仅是因为它不区分大小写,因此更健壮。stristr()

例:

$linkKW = $_GET['kw'];

switch (true){
   case stristr($linkKW,'berlingo'):
      include 'berlingo.php';
      break;
   case stristr($linkKW,'c4'):
      include 'c4.php';
      break;
}

如果你愿意,你也可以使用stripos()strpos()(谢谢,Fractaliste),尽管我个人觉得这更难阅读。与上述其他方法相同的交易;我走了不区分大小的路线。

例:

$linkKW = $_GET['kw'];

switch (true){
   case stripos($linkKW,'berlingo') !== false:
      include 'berlingo.php';
      break;
   case stripos($linkKW,'c4') !== false:
      include 'c4.php';
      break;
}

答案 2

由于在语句中只会执行简单的相等性测试,因此在这里对您没有多大帮助。您需要通过字符串匹配函数运行字符串,最适合该函数是 。直截了当的答案是:switchstrpos

if (strpos($_GET['kw'], 'berlingo') !== false) {
    include 'berlingo.php';
} else if (strpos($_GET['kw'], 'c4') !== false) {
    include 'c4.php';
} … and so on …

更优雅的解决方案是这样的:

$map = array('berlingo' => 'berlingo.php', 'c4' => 'c4.php', …);
foreach ($map as $keyword => $file) {
    if (strpos($_GET['kw'], $keyword) !== false) {
        include $file;
        break;
    }
}

或者,如果关键字和文件之间的对应关系始终为 1:1:

$keywords = array('berlingo', 'c4', …);
foreach ($keywords as $keyword) {
    if (strpos($_GET['kw'], $keyword) !== false) {
        include "$keyword.php";
        break;
    }
}

推荐