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

seb*_*ian 26 php string switch-statement url-parameters php-include

我正在使用PHP开关根据页面URL参数中传入的传入关键字包含某些文件.

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

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

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

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

    } 
?>
Run Code Online (Sandbox Code Playgroud)

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

例如,我想包括的berlingo.php文件,如果关键字berlingo,但如它的citroen berlingo.

如何使用PHP case select(switch语句)评估给定字符串是否包含值?

谢谢.

baa*_*cke 38

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

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

例:

$linkKW = $_GET['kw'];

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

如果你愿意,也可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • 你的想法是`strpos()`:`switch(true){case strpos($ name,'incident')!== false:/*job*/` (4认同)

dec*_*eze 8

因为在一个switch语句中只会执行一个简单的相等测试,所以在这里对你没有多大帮助.您需要通过字符串匹配函数运行字符串,最适合的是strpos.直截了当的答案是:

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

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

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

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

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


Cor*_*Xii 0

strpos()用于检查一个字符串是否包含另一个字符串。

还有其他用于检查字符串相似性的函数等。

但Aswitch不会这样做,因为它将静态表达式与单个值进行比较。你必须使用ifs。