Come restituire solo i gruppi denominati con preg_match o preg_match_all?
Attualmente non è possibile (PHP7). Si otterrà sempre una matrice di tipo misto, contenente tasti numerici e denominati.
Consente citare manuale PHP (http://php.net/manual/en/regexp.reference.subpatterns.php):
Questa subpattern verrà indicizzato nell'array partite dalla sua posizione normale numerica e anche per nome.
Per risolvere il problema i seguenti frammenti di codice possono aiutare:
1. Filtro matrice utilizzando un controllo is_string sull'array chiave (per PHP5.6 +)
$array_filtered = array_filter($array, "is_string", ARRAY_FILTER_USE_KEY);
2.foreach sugli elementi e disinserire se chiave dell'array is_int() (tutte le versioni di PHP)
/**
* @param array $array
* @return array
*/
function dropNumericKeys(array $array)
{
foreach ($array as $key => $value) {
if (is_int($key)) {
unset($array[$key]);
}
}
return $array;
}
La sua una semplice funzione PHP chiamata dropNumericKeys()
. Si tratta della post-elaborazione di un array di corrispondenze dopo l'esecuzione di preg_match*()
utilizzando gruppi con nome per la corrispondenza. Le funzioni accettano $array
. Itera l'array e rimuove/rimuove tutte le chiavi con tipo intero, lasciando intatte le chiavi con tipo di stringa. Infine, la funzione restituisce l'array con "ora" solo le chiavi con nome.
Nota: la funzione è compatibile con PHP verso il basso. Funziona su tutte le versioni. La soluzione array_filter
si basa sulla costante ARRAY_FILTER_USE_KEY
, che è disponibile solo su PHP5.6 +. Vedere http://php.net/manual/de/array.constants.php#constant.array-filter-use-key
fonte
2016-01-11 14:21:40
In array di piccole dimensioni questo non rappresenta un problema, ma in molto grande con molti motivi potrebbero esserci problemi con esigenze di memoria elevate. In secondo luogo, sembra più pulito in questo modo e ci sarebbe (con questo modificatore inesistente) una riga di codice in meno, quindi meno possibilità di un errore. – rsk82
Al contrario: perché questo non può essere fatto da PCRE, dovresti aggiungere altro codice, dove potrebbero esserci più problemi. – Charles
Intendevo gli elementi aggiuntivi nell'array. – Maerlyn