2009-08-05 6 views
1

私は、キーをインデックスとする配列、例えば、持っている:一定の値を維持するためにarray_filterの反対と保存キー

array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    ... 
    'key57' => 'value57' 
) 

例えば、唯一持っているために、その配列を「フィルタリング」する方法を:

array(
    'key2' => 'value2', 
    'key57' => 'value57' 
) 

とキーを保持します。

私はarray_filter()関数を知っていますが、2と57を除くすべての項目を除外したくはありません。いいえ、これらの値を保持したいだけです。

array_keep()という名前のPHPコア関数がありますか?

ありがとうございました。

+0

申し訳ありませんが、私はそれを取得しません。 array_filterを使用して必要な値を返し、配列を上書きするだけでいいのですか? $ array = array_filter($ array、 'filterFunction'); –

答えて

5

保存しておきたい正確にどのキーを知っている場合は、あなたが簡単にそれを行うための関数を書くことができます:

<?php 
function array_keep($array, $keys) { 
    return array_intersect_key($array, array_fill_keys($keys, null)); 
} 

$array = array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key57' => 'value57' 
); 

$newArray = array_keep($array, array('key2', 'key57')); 

print_r($newArray); 

出力:

Array 
(
    [key2] => value2 
    [key57] => value57 
) 
+0

偉大な、まさに私が望んでいた、ありがとう! – abernier

2

まあ、array_filterは、コールバックがfalseを返す要素を除外します。コールバック関数でチェック/ロジックを逆にすると、結果は得られますか?

4

トムの機能の代替:

$keptValues = array_intersect_key($array, array_flip(array($key1, $key2))); 

または、魔法は少ないが冗長表示:

$keptValues = array_intersect_key($array, array($key1 => null, $key2 => null)); 
+0

ええ、私はこれのためにarray_flipを使っていましたが、先週array_fill_keys()を発見しました。これは良いかもしれないと思いました –

+0

@deceze plus one –

関連する問題