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

-3 php regex arrays

如何过滤一个关联数组,该数组采用一个或多个字符并使用正则表达式将其与数组键进行匹配,然后返回匹配的数组?

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

select all from table-name where username LIKE %search%
Run Code Online (Sandbox Code Playgroud)

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

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

sep*_*ehr 6

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

$haystack = [
    'foo'       => 123,
    'foobar'    => 234,
    'foobarbaz' => 345,
    'barbazfoo' => 456,
    'foobaz'    => 567,
];
Run Code Online (Sandbox Code Playgroud)

您可以按键过滤数组,foobar如下所示:

$matches = preg_grep('/foobar/', array_keys($haystack))
// => [
//     1 => "foobar",
//     2 => "foobarbaz",
// ]
Run Code Online (Sandbox Code Playgroud)

现在你有了键,你只需要减少原始数组:

array_intersect_key($haystack, array_flip($matches))
// => [
//     "foobar" => 234,
//     "foobarbaz" => 345,
// ]
Run Code Online (Sandbox Code Playgroud)

有很多方法可以做到这一点。由于反应性是您的情况的一个问题,因此您需要找到最有效的方法来做到这一点。

将其包装为一个函数:

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

    return array_intersect_key($haystack, array_flip($matches));
}
Run Code Online (Sandbox Code Playgroud)