$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 仅包含“名称”和“数字”值,而不通过迭代删除其他值。
有没有更快的方法? preg_match 默认情况下只能返回字符串类型的键吗?
注意:上面的 preg_match 是一个例子。我想要任何输入的解决方案。
最佳答案
没有像 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
关于php - 返回与 preg_match 的匹配项,不带数字键的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54669536/