2010-04-09 85 views
0

说我有一个HashMap,PHP选择哈希使用通配符

$hash = array('fox' => 'some value', 
       'fort' => 'some value 2', 
       'fork' => 'some value again); 

我试图完成的自动完成功能。当用户键入'fo'时,我想通过ajax从$ hash中检索3个键。当用户键入'for'时,我想只检索堡垒和叉子。这可能吗?

我在想什么是使用二进制搜索隔离键与'f',而不是蛮力搜索。然后继续消除索引,因为用户键入他们的查询。有没有更有效的解决方案?

编辑:关于通配符,我想知道的是,如果有办法做$ hash [“f *”],返回所有以'f'开头的索引。

回答

5

这应该做的伎俩:

$matches = preg_grep('/^for/', array_keys($hash)); 

,你会最终

$matches[0] = 'fort'; 
$matches[1] = 'fork' 

从中你可以参考回到原来的$哈希阵列。

+0

诅咒!你的回答比我写的要好! (+1) – 2010-04-09 02:34:25

+0

只要确保您使用preg_quote! – MiffTheFox 2010-04-09 04:56:29