如何仅返回具有preg_match或preg_match_all的命名组?
这目前(PHP7)是不可能的。您将始终获得一个混合类型数组,其中包含数字和命名键。
让我们引用PHP手册(http://php.net/manual/en/regexp.reference.subpatterns.php):
然后,此子模式将按其正常数字位置和名称在匹配数组中编制索引。
要解决此问题,以下代码片段可能会有所帮助:
1. 使用数组键的is_string检查来过滤数组(对于 PHP5.6+)
$array_filtered = array_filter($array, "is_string", ARRAY_FILTER_USE_KEY);
2. foreach over elements 和 unset if array key is_int() (所有 PHP 版本)
/**
* @param array $array
* @return array
*/
function dropNumericKeys(array $array)
{
foreach ($array as $key => $value) {
if (is_int($key)) {
unset($array[$key]);
}
}
return $array;
}
它是一个名为 的简单 PHP 函数。它用于在运行后使用命名组进行匹配的匹配数组的后处理。这些函数接受 .它迭代数组并删除/取消设置所有具有整数类型的键,使字符串类型的键保持不变。最后,该函数返回仅包含“now”命名键的数组。dropNumericKeys()
preg_match*()
$array
注意:该函数用于PHP向下兼容。它适用于所有版本。该解决方案依赖于常量,该常量仅在 PHP5.6+ 上可用。查看 http://php.net/manual/de/array.constants.php#constant.array-filter-use-keyarray_filter
ARRAY_FILTER_USE_KEY