我有一个名为“菜单”的数组,当通过 print_r 时,当前输出:
Array ( [4_00] => Array ( [0] => 1 ), [3_00] => Array ( [0] => 1 ), [7_00] => Array ( [0] => 1 ) )
我想创建一个表达式,该表达式将在此数组中搜索以“4_”开头的任何键。我试过这个:
$matches = preg_grep( '/^4_/', $menu );
但这似乎不起作用。
有什么帮助吗?
非常感激
一个好的旧foreach
循环和字符串比较有什么问题?它完成了工作。
$results = array();
foreach ($menu as $key => $val) {
if (strncmp($key, '4_', 2) === 0) {
$results[] = array($key, $val);
}
}
print_r($results);
我认为该功能在手册中定义不明确。函数preg_grep返回一个键数组,其中数组的值与正则表达式匹配。
您需要这样的功能才能按预期工作
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) {
return array_intersect_key($input, array_flip(preg_grep($pattern, array_keys($input), $flags)));
}