PHP equivalent of indexOf


PHP equivalent of indexOf

我有以下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()。