正则表达式搜索数组键

时间:2013-08-08 15:56:21

标签: php regex

我有一个名为'menu'的数组,当通过print_r输出时,当前输出:

Array ( [4_00] => Array ( [0] => 1 ), [3_00] => Array ( [0] => 1 ), [7_00] => Array ( [0] => 1 ) )

我想创建一个表达式,在这个数组中搜索任何以'4_'开头的键。我试过这个:

$matches = preg_grep( '/^4_/', $menu );

但这似乎不起作用。

任何帮助?

非常感谢

2 个答案:

答案 0 :(得分:3)

良好的旧foreach循环和字符串比较有什么问题?它完成了工作。

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

答案 1 :(得分:1)

我认为手册中的功能定义不明确。函数preg_grep返回一个键数组,其中数组的与正则表达式匹配。

您需要一个功能like this才能让您按预期工作

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

如果你想保持紧张,你甚至可以去like this

function preg_grep_keys($pattern, $input, $flags = 0) {
    return array_intersect_key($input, array_flip(preg_grep($pattern, array_keys($input), $flags)));
}