私は2つの配列を持っています:
$arr1 = array('a' => 10, 'b' => 20);
$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);
array_filterを使用し$arr2
て、に存在しない要素を削除するにはどうすればよい$arr1
ですか?私の例の「c」のように...
この目的のために特別に作成された関数があります: 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);
array_filterコールバックでin_arrayを使用します。
$arr2 = array_filter($arr2, function($e) use ($arr1) {
return in_array($e, $arr1);
});
これは、キーではなく要素の値に関係することに注意してください。array_filterは使用するキーを提供しないため、それが必要な場合は、通常のforeachループの方が適している可能性があります。
キーに基づいて配列を交差させるには:
array_intersect_key($arr1, $arr2);
アップデート
残念ながら、array_filter
配列キーに基づいて交差できる解決策はありません:(