array_uintersect_assoc

関数の概要

array_uintersect_assocは、複数の配列のうちキーと値の両方が一致する要素だけを、ユーザー定義の比較関数を使って取得するPHPの関数です。この関数はキーまで比較対象に含めるため、単純な値の一致だけでなく、配列の構造を厳密に照合したい場合に役立ちます。

パラメータの説明

  • array $array1 — 比較の基準となる配列
  • array …$arrays — 比較対象となる複数の配列
  • callable $key_compare_func — キーの比較に使用するコールバック関数。2つのキーを受け取り、等しければ0、1つ目が大きければ正の整数、2つ目が大きければ負の整数を返す関数

戻り値

キーと値の両方がすべての配列間でユーザー定義の関数に基づき一致した要素を含む、新しい配列を返します。元の配列のキーが保持されます。共通部分がない場合は空の配列が返ります。

使用例

基本的な使い方

 "green", "b" => "brown", "c" => "blue"];
$array2 = ["a" => "green", "b" => "yellow", "c" => "blue"];

$result = array_uintersect_assoc(
    $array1,
    $array2,
    function($key1, $key2) {
        return strcmp($key1, $key2);
    }
);

print_r($result);
?>

この例ではキーを文字列比較関数 strcmp で比較し、キーと値が両方一致する要素のみを抽出しています。結果は a => greenc => blue となります。

大文字・小文字を区別しないキー比較

 1, "B" => 2];
$array2 = ["a" => 1, "b" => 3];

$result = array_uintersect_assoc(
    $array1,
    $array2,
    function($key1, $key2) {
        return strcasecmp($key1, $key2);
    }
);

print_r($result);
?>

キー比較を大文字・小文字を区別しない strcasecmp にすることで、"A""a" を同じキーとみなし、一致する要素が抽出されます。この場合、値まで一致する "A" => 1 のみ結果に残ります。

数値キーでの比較関数使用例

 "apple", 20 => "banana"];
$array2 = [10 => "apple", 30 => "banana"];

$result = array_uintersect_assoc(
    $array1,
    $array2,
    function($key1, $key2) {
        return $key1 - $key2;
    }
);

print_r($result);
?>

ここでは数値キーを単純に数値の大小比較を行っています。キーと値が両方一致する 10 => "apple" のみが結果に残ります。

関連する関数

  • array_intersect_assoc — キーと値が完全一致する共通要素を取得(内部で標準比較)
  • array_uintersect — 値の比較にユーザー定義関数を使いキーは無視
  • array_intersect_key — キーのみで共通要素を取得
  • array_intersect — 値のみで共通要素を取得

まとめ

array_uintersect_assocは配列の共通部分を取得するときに、キーの比較もユーザー定義関数で自由にカスタマイズしたい場合に非常に便利な関数です。キーと値の両方の条件で厳密に共通部分を抽出したいケースに最適で、特に配列のキーが文字列で大文字小文字の区別が必要な場合や、独自の比較ロジックを入れたい場合に活用できます。複数の配列の一致条件を柔軟に制御したい際には覚えておくと役立ちます。