返回带有preg_match的匹配项,不包含带有数字键的项目

时间:2019-02-13 11:51:22

标签: php arrays regex match preg-match

$str = 'foobar: 2008';

preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

print_r($matches);

Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

我希望$ matches只包含'name'和'digit'值,而不通过迭代删除其他值。

这是更快的方法吗?默认情况下,preg_match可以只为我返回字符串型键吗?

注意:上面的preg_match是一个示例。我想要任何输入的解决方案。

1 个答案:

答案 0 :(得分:3)

没有preg_match这样的“简单”方法,因为仅输出命名组没有这样的选择。

如果必须从数组中删除带有数字键的项目,并且不想使用显式循环,则可以使用以下array_filter解决方法:

$str = 'foobar: 2008';
if (preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches)) {
    print_r(
      array_filter($matches, function ($key) { return !is_int($key); }, ARRAY_FILTER_USE_KEY)
    );
} // => Array ( [name] => foobar [digit] => 2008 )

请参见PHP demo