Frage

Ich möchte etwas scheinbar sehr Einfaches tun, kann aber nichts dazu finden:Extrahieren Sie einfach eine Teilmenge eines Arrays, ähnlich wie array_splice, aber Verwenden von Schlüsseln zum Abrufen der Werte :

$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');

Wenn alles andere fehlschlägt, gibt es nicht eine integrierte Funktion zum Filtern eines assoziativen Arrays nach Schlüsseln?Zum Beispiel:

$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'];  

Ich schätze, der Grund, warum ich den ersten machen möchte, ist, dass ich den assoziativen Array-Zugriff nicht gerne in meinem gesamten Code wiederholen möchte. Er scheint besser optimiert zu sein, um die Werte zu kopieren, die häufig verwendet werden (z. B. in einer Schleife). ), in eine lokale Variable, außerdem ist es viel einfacher, $name einzugeben als $somearray['name'].

BEARBEITEN:Danke, ich denke, die Verwendung mit Liste wäre die Lösung

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

Interessante Verwendung von array_flip!

War es hilfreich?

Lösung

in der PHP-Version >= 5.1.0 könnten Sie verwenden 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));

Werte in $ex Egal, sie müssen einfach vorhanden sein.

Andere Tipps

Dies entspricht im Wesentlichen der Antwort von SilentGhost, ist jedoch möglicherweise einfacher und wahrscheinlich etwas langsamer.

array_intersect_key($array, array_flip($wantedKeys));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top