通过正则表达式过滤关联数组键

时间:2016-12-17 08:04:31

标签: php arrays regex

如何使用正则表达式过滤带有一个或多个字符并使用数组键匹配的关联数组,然后返回匹配的数组?

就像我们查询数据库一样:

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

我想对关联数组做同样的事情。

我需要在客户端发送每个keyup事件的ajax调用。然后服务器获取该密钥,过滤数组并发回结果。

1 个答案:

答案 0 :(得分:3)

考虑到你有一个像这样的数组:

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

您可以按foobar键过滤数组:

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

现在您已经拥有了密钥,您只需要减少原始数组:

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));
}