大海捞针的最快测定方法


fastest method for determining needle in haystack

我有我的请求URI:

string '/admin' (length=16)

我有一组区域设置代码:

array (size=2)
 'US' => string 'en_US' (length=5)
 'FR' => string 'fr_FR' (length=5)

我要查找的是确定请求URI没有来自所提供数组的区域设置代码。

如果没有,我需要在单词admin之前注入一个区域设置代码,这样它看起来如下:/en_US/admin

处理这项任务最快的方法是什么?Id需要一个针对大量区域设置的快速搜索方法,然后以某种方式在请求URI 的开头注入区域设置

你可以做:

$uri_splitup = explode('/', $request_uri)
if (in_array($uri_splitup[0], $locales)) {
    // localised URI
} else {
    // not-localised URI
}

使用explode(),您可以用斜杠将请求URI拆分。它返回一个数组。之后,使用in_array(),检查URI的第一部分是否存在于具有区域设置的数组的值中。

explode()的时间复杂度可以被认为是恒定的,因为你的URI可能总是有或多或少相同的长度。此外,这部分代码在正常长度上不会花费太多时间。in_array()的时间复杂度是O(n)n是数组中元素的数量。在未排序的数组上无法获得更快的搜索算法。