我有一组从 Web 服务中收集的按字母顺序排序的街道名称。该数组存在于服务器端。
在客户端,用户开始输入他居住的街道名称,AJAX 用于返回与部分街道名称最接近匹配的列表,加上数组中接下来的 9 个街道名称(列表在他打字时更新)。
例如,如果用户键入“al”,我希望结果如下所示:
- 奥尔巴尼高速公路
- 阿尔本斯谷
- 阿尔卡斯顿路
- 亚历克斯伍德博士
- 爱丽丝路
- 阿拉瓦CT
- 艾伦路
- 允许 Pl
- 奥尔伍德大道
- 阿罗拉街
- 阿曼达博士
这是我的尝试:
$matches = array();
for($i = 0; $i < count($streetNames); $i++)
{
if( (stripos($streetNames, $input) === 0 && count($matches) == 0) || count($matches) < 10 ){
$matches[] = $streetNames[$i];
} else {
break;
}
}
还有其他人知道更快的方法吗?
请注意:我无法控制如何从数据库中获取此列表 - 它来自外部网络服务。
最佳答案
使用preg_grep()
:
$matches = preg_grep('/al/', $streetNames);
注意:像您这样的方法将是暴力搜索。如果您要搜索大量名称(数十万)或搜索大量次数,那么您可能需要更好的东西。然而,对于小型数据集,这很好。
关于php - 在 PHP 中,在数组中搜索包含子字符串的值的快速方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107948/