2009-02-20 16 views
12

Ich möchte etwas scheinbar sehr einfach tun, aber ich kann nichts darüber finden: einfach extrahieren Sie eine Teilmenge eines Array ähnlich Array_Splice, aber mit Schlüsseln zu rufen die Werte:Eine Teilmenge von Werten aus einem assoziativen Array (PHP) extrahieren

$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, ist nicht, dass es eine eingebaute Funktion ein assoziatives Array von Schlüssel zu filtern? 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 denke, der Grund, warum ich den ersten tun möchte, ist, dass Ich mag keinen Zugriff assoziatives Array wiederholen über meinen Code, wäre es besser optimiert scheinen die Werte zu kopieren, die verwendet werden, viel (in einer Schleife zum Beispiel), in eine lokale Variable, und es ist viel einfacher, $ name als $ somearray ['name'] einzugeben.

EDIT: Danke, ich für die Verwendung erraten mit Liste, wäre die Lösung

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

Intesresting Verwendung von array_flip sein!

Antwort

7

in PHP-Version> = 5.1.0 Sie array_intersect_key verwenden:

$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 keine Rolle spielen, sie müssen nur vorhanden sein.

27

Dies ist im Wesentlichen das gleiche wie SilentGhost Antwort, aber das könnte einfacher sein, und wahrscheinlich ein wenig langsamer.

array_intersect_key($array, array_flip($wantedKeys)); 
Verwandte Themen