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!

È stato utile?

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top