Php 用于搜索数组键的正则表达式

Php 用于搜索数组键的正则表达式,php,regex,Php,Regex,我有一个名为“菜单”的数组,当通过打印时,当前输出: Array ( [4_00] => Array ( [0] => 1 ), [3_00] => Array ( [0] => 1 ), [7_00] => Array ( [0] => 1 ) ) 我想创建一个表达式,用于在该数组中搜索以“4”开头的任何键。我试过这样做: $matches = preg_grep( '/^4_/', $menu ); 但这似乎不起作用 有什么帮助吗 非常感谢我认为手册中

我有一个名为“菜单”的数组,当通过打印时,当前输出:

Array ( [4_00] => Array ( [0] => 1 ), [3_00] => Array ( [0] => 1 ), [7_00] => Array ( [0] => 1 ) )
我想创建一个表达式,用于在该数组中搜索以“4”开头的任何键。我试过这样做:

$matches = preg_grep( '/^4_/', $menu );
但这似乎不起作用

有什么帮助吗


非常感谢

我认为手册中对该功能的定义很差。函数返回一个键数组,其中数组的值与正则表达式匹配

您需要一个函数才能按预期工作

function preg_grep_keys( $pattern, $input, $flags = 0 ) {
    $keys = preg_grep( $pattern, array_keys( $input ), $flags );
    $vals = array();
    foreach ( $keys as $key ) {
        $vals[$key] = $input[$key];
    }
    return $vals;
}
如果你想把事情搞得很紧,你甚至可以去


我认为该功能在手册中定义得很差。函数返回一个键数组,其中数组的值与正则表达式匹配

您需要一个函数才能按预期工作

function preg_grep_keys( $pattern, $input, $flags = 0 ) {
    $keys = preg_grep( $pattern, array_keys( $input ), $flags );
    $vals = array();
    foreach ( $keys as $key ) {
        $vals[$key] = $input[$key];
    }
    return $vals;
}
如果你想把事情搞得很紧,你甚至可以去


好的旧
foreach
循环和字符串比较有什么问题?它完成了任务

$results = array();
foreach ($menu as $key => $val) {
    if (strncmp($key, '4_', 2) === 0) {
        $results[] = array($key, $val);
    }
}
print_r($results);

好的旧
foreach
循环和字符串比较有什么问题?它完成了任务

$results = array();
foreach ($menu as $key => $val) {
    if (strncmp($key, '4_', 2) === 0) {
        $results[] = array($key, $val);
    }
}
print_r($results);

你能解释一下原因吗?如果您只需要匹配前2个字符,那么substr($key,0,2)==“4”如何?是否只返回键?您能解释原因吗?如果你只需要匹配前2个字符,那么substr($key,0,2)==“4”?你只想返回密钥吗?这很快,是不是有个虚拟帐户?是的,我也在想同样的事情。答案出现在提问45秒后,更不用说中间的编辑了。这很快,是不是有个虚拟账户?是的,我也在想同样的事情。答案出现在提问45秒后,更不用说中间的编辑了。