2016-12-17 71 views
-3

如何過濾使用一個或多個字符並使用正則表達式匹配數組鍵的關聯數組,然後返回匹配的數組?通過正則表達式過濾關聯數組鍵

就像我們查詢數據庫:

select all from table-name where username LIKE %search% 

我想要做同樣的關聯數組。

我需要爲客戶端上的每個keyup事件發送一個ajax調用。然後服務器獲取該密鑰,過濾數組並返回結果。

+0

可以爲用戶提供輸入和預期的輸出請短樣品。謝謝。無論如何,你可能正在尋找[array_intersect/diff](http://php.net/array_intersect)系列函數。或[array_filter](http://php.net/array_filter)與自定義回調。 – Gordon

回答

1

考慮,你有一個這樣的數組:

$matches = preg_grep('/foobar/', array_keys($haystack)) 
// => [ 
//  1 => "foobar", 
//  2 => "foobarbaz", 
// ] 

現在,你有鑰匙,你只需要:

$haystack = [ 
    'foo'  => 123, 
    'foobar' => 234, 
    'foobarbaz' => 345, 
    'barbazfoo' => 456, 
    'foobaz' => 567, 
]; 

您可以通過foobar鍵這樣過濾數組減少原始陣列:

array_intersect_key($haystack, array_flip($matches)) 
// => [ 
//  "foobar" => 234, 
//  "foobarbaz" => 345, 
// ] 

有很多方法可以做到這一點。由於反應性在您的情況中是一個問題,您需要找到執行此操作的最高性能方法。

要包起來作爲一個功能:

function array_key_lookup($haystack, $needle) 
{ 
    $matches = preg_grep("/$needle/", array_keys($haystack)); 

    return array_intersect_key($haystack, array_flip($matches)); 
}