3

私は2つの配列を持っています:

$arr1 = array('a' => 10, 'b' => 20);

$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);

array_filterを使用し$arr2て、に存在しない要素を削除するにはどうすればよい$arr1ですか?私の例の「c」のように...

4

3 に答える 3

8

この目的のために特別に作成された関数があります: array_intersect() :

array_intersect — 配列の交点を計算する

$arr2 = array_intersect($arr1, $arr2);

array_intersect()のような値ではなくキーを比較する場合は、array_intersect_key ()を使用します。

array_intersect_key — 比較のためにキーを使用して配列の交点を計算します

$arr2 = array_intersect_key($arr1, $arr2); 

key=>valueペアを比較したい場合は、 array_intersect_assoc()を使用してください:

array_intersect_assoc — 追加のインデックス チェックを使用して配列の共通部分を計算します

$arr2 = array_intersect_assoc($arr1, $arr2); 
于 2012-06-05T09:09:55.840 に答える
5

array_filterコールバックでin_arrayを使用します。

$arr2 = array_filter($arr2, function($e) use ($arr1) {
    return in_array($e, $arr1);
  });

これは、キーではなく要素のに関係することに注意してください。array_filterは使用するキーを提供しないため、それが必要な場合は、通常のforeachループの方が適している可能性があります。

于 2012-06-05T09:05:58.757 に答える
1

キーに基づいて配列を交差させるには:

array_intersect_key($arr1, $arr2);

アップデート

残念ながら、array_filter配列キーに基づいて交差できる解決策はありません:(

于 2012-06-05T09:14:05.767 に答える