2010-04-09 84 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