2009-02-20 23 views
12

私は一見非常に単純なことをしたいと思いますが、何も見つかりません:array_spliceに似た配列のサブセットを単純に抽出しますが、取得した値連想配列(php)から値のサブセットを抽出する

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

他のすべてが失敗した場合、キーで連想配列をフィルタリングするための組み込み関数が存在しないのですか?例:

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

私は最初のものをやりたい理由を、私は理由を推測、使用されている値をコピーするために、より良い最適化されたと思われる、私はすべての私のコードの上に連想配列アクセスを繰り返して好きではないということです(例えばループのような)たくさんの変数をローカル変数に追加するだけでなく、$ somearray ['name']よりも$ nameを入力する方がはるかに簡単です。

編集:おかげで、私はリストで使用するために推測し、解決策はarray_flipの使用をIntesresting

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

だろう! PHPのバージョン> =で

答えて

7

は、あなたがarray_intersect_keyを使用することができます5.1.0:$ex

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

値は、彼らはただ存在しなければならない、重要ではありません。

27

これはSilentGhostの答えと本質的に同じですが、これは簡単で、おそらく少し遅くなる可能性があります。

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