17

一見非常に単純なことをしたいのですが、それについて何も見つかりません.array_spliceに似た配列のサブセットを抽出するだけですが、キーを使用して値を取得します:

$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 を入力する方がはるかに簡単です。

編集:ありがとう、リストで使用すると思いますが、解決策は次のようになります

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

array_flip の面白い使い方!

4

2 に答える 2

38

これは基本的にSilentGhostの答えと同じですが、これは簡単で、おそらく少し遅いかもしれません。

array_intersect_key($array, array_flip($wantedKeys));
于 2009-02-20T13:06:53.097 に答える
11

PHPバージョン> = 5.1.0では、次を使用できます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));

の値$exは問題ではなく、存在する必要があります。

于 2009-02-20T12:37:54.243 に答える