2016-12-17 199 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)); 
}