Cómo devolver sólo grupos nombrados con preg_match o preg_match_all?
Esto es actualmente (PHP7) no posible. Siempre obtendrá una matriz de tipo mixto, que contiene claves numéricas y con nombre.
Lets citar el manual de PHP (http://php.net/manual/en/regexp.reference.subpatterns.php):
Este sub-patrón entonces será indexado en la matriz de partidos por su posición numérica normal de y también por su nombre.
Para resolver el problema de los siguientes fragmentos de código podrían ayudar:
1. Filtro de la matriz mediante el uso de un control de is_string en la matriz clave (por PHP5.6 +)
$array_filtered = array_filter($array, "is_string", ARRAY_FILTER_USE_KEY);
2.foreach sobre los elementos y desarmar si is_int clave array() (todas las versiones de PHP)
/**
* @param array $array
* @return array
*/
function dropNumericKeys(array $array)
{
foreach ($array as $key => $value) {
if (is_int($key)) {
unset($array[$key]);
}
}
return $array;
}
Su función PHP simple denominada dropNumericKeys()
. Es para el procesamiento posterior de una matriz de coincidencias después de ejecutar preg_match*()
usando grupos nombrados para hacer coincidir. Las funciones aceptan un $array
. Repite la matriz y elimina/desactiva todas las claves con el tipo de entero, dejando intactas las claves con el tipo de cadena. Finalmente, la función devuelve la matriz con solo "ahora" claves con nombre.
Nota: La función es para compatibilizar PHP hacia abajo. Funciona en todas las versiones. La solución array_filter
se basa en la constante ARRAY_FILTER_USE_KEY
, que solo está disponible en PHP5.6 +. Ver http://php.net/manual/de/array.constants.php#constant.array-filter-use-key
En matrices pequeñas, esto no representa un problema, pero en un entorno muy grande con muchos patrones, puede haber problemas con altas necesidades de memoria. En segundo lugar, se ve más limpio de esa manera, y habría (con este modificador no existente) una línea de código menor, por lo que hay menos posibilidades de error. – rsk82
Todo lo contrario: como PCRE no puede hacer esto, tendría que agregar más código, donde podría haber más problemas. – Charles
Quise decir los elementos adicionales en la matriz. – Maerlyn