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)
因为在一个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)