Estrazione di un sottoinsieme di valori da un array associativo (php)
-
05-09-2019 - |
Domanda
Voglio fare qualcosa apparentemente molto semplice, ma non riesco a trovare nulla a riguardo:estrai semplicemente un sottoinsieme di un array simile a array_splice, ma utilizzando le chiavi per recuperare i valori :
$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,
/* many more data I don't need here ... */);
list($name, $age, $id) = array_splice_by_keys($data,
array('personName', 'personAge', 'personId');
Se tutto il resto fallisce, non esiste una funzione incorporata per filtrare un array associativo in base alle chiavi?Per esempio:
$filteredArray = array__extract__keys__and__values($srcArray, $arrayOfWantedKeys);
// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
array('personName', 'personAge', 'personId');
echo $wanted_values['personName'];
Immagino che il motivo per cui voglio fare il primo sia che non mi piace ripetere l'accesso all'array associativo in tutto il mio codice, sembrerebbe meglio ottimizzato per copiare i valori che vengono utilizzati molto (ad esempio in un ciclo ), in una variabile locale, inoltre è molto più semplice digitare $name che $somearray['name'].
MODIFICARE:Grazie, immagino che per l'uso con list la soluzione sarebbe
list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));
Utilizzo interessante di array_flip!
Soluzione
nella versione php >= 5.1.0 potresti usare array_intersect_key
:
$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,
'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));
valori dentro $ex
non importa, devono solo essere presenti.
Altri suggerimenti
Questa è essenzialmente la stessa risposta di SilentGhost ma potrebbe essere più semplice e probabilmente un po' più lenta.
array_intersect_key($array, array_flip($wantedKeys));