我有以下JS:
if(window.location.href.indexOf("search.php") != -1
|| window.location.href.indexOf("list.php") != -1
|| window.location.href.indexOf("view.php") != -1
|| window.location.href.indexOf("contact.php") != -1) {
但想将其转换为PHP。PHP中的indexOf等价物是什么,或者在PHP中执行此操作的最佳方法。
我不明白人们在下面链接到的strpos示例。也许一个更符合我在 JS 中所做的示例?
这个问题要求一个等价物。PHP 的 strpos() 不能在数组上工作,而 javascript 的 indexOf 可以(通过自动将字符串视为数组)。所以这是一个PHP等价物
function indexOf($array, $word) {
foreach($array as $key => $value) if($value === $word) return $key;
return -1;
}
// Example: indexOf(['hi','bye'], 'bye') returns 1
虽然你的JavaScript代码使用的是indexOf()
,但PHP实际上有一个更好的方法来处理你想要实现的目标。
您只需检查 URL 中的脚本名称,然后基于它执行操作。
在我看来,PHP switch
语句比 if 语句与 PHP strpos()
函数相结合要好。
下面是如何使用 PHP switch 语句实现此目的的图示:
switch(basename($_SERVER['SCRIPT_NAME'])) {
case 'search.php':
// Script to run for search.php
break;
case 'list.php':
// Script to run for list.php
break;
case 'view.php':
// Script to run for view.php
break;
case 'contact.php':
break;
default:
// Perform code on anything except the above cases.
break;
}
strpos()
应该可以解决问题,它也会在失败时返回布尔false
。
JS版本:
indexOf() 方法返回 字符串中的指定值。此方法返回 -1 如果值为 搜索永远不会发生。注意:indexOf() 方法区分大小写。
PHP版本:
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
查找针在 干草堆字符串。返回指针相对于 干草堆字符串的开头(与偏移量无关)。另请注意 该字符串位置从 0 开始,而不是 1。返回 FALSE,如果 未找到针头。
在回答您的次要问题时,strpos 可以按如下方式使用:
if (strpos($_SERVER['SCRIPT_NAME'], "search.php") !== false
|| strpos($_SERVER['SCRIPT_NAME'], "list.php") !== false
|| strpos($_SERVER['SCRIPT_NAME'], "view.php") !== false
|| strpos($_SERVER['SCRIPT_NAME'], "contact.php") !== false) {
。虽然罗科德的回答确实更优雅。
strpos();
如果您不使用 ISO-8859-1 编码(UTF-8 或其他),则应使用 mb_strpos()。