array_udiff_uassoc

関数の概要

array_udiff_uassoc は、PHPで配列のキーと値の両方をユーザー定義の比較関数で比較し、差分を取得するための関数です。この関数を使うことで、標準の差集合では対応しきれない複雑な比較が可能になります。キーと値の比較ロジックを任意にカスタマイズできるため、独自の条件に基づいて配列の差分を抽出したい場合に役立ちます。

パラメータの説明

  • array $array1 – 比較したい最初の配列。
  • array $array2, array …$arrays – 比較対象となる2つ目以降の配列。複数指定可能。
  • callable $value_compare_func – 配列の値を比較するための関数。返り値は整数(0で等しい、0より小さいで小さい、0より大きいで大きいを示す)。
  • callable $key_compare_func – 配列のキーを比較するための関数。こちらも値比較関数と同様に整数を返す必要があります。

戻り値

差集合を表す配列を返します。$array1 にあって、かつ指定したすべての配列のキーと値の比較関数による判定でマッチしない要素のみが含まれます。キーおよび値の両方が比較関数により検証され、差分として抽出されるため、戻り値はオリジナルのキーを維持した形で返されます。

使用例

基本的な使い方

<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 1, 'b' => 4, 'd' => 3];

$result = array_udiff_uassoc(
    $array1,
    $array2,
    function($v1, $v2) {
        return $v1 - $v2;
    },
    function($k1, $k2) {
        return strcmp($k1, $k2);
    }
);

print_r($result);
// 結果: ['b' => 2, 'c' => 3]
?>

この例では、キーと値の両方を文字列比較および数値比較で判断し、$array1 にあって $array2 に合致しない要素(値もしくはキーが違うもの)を取得しています。

大文字・小文字を無視したキー比較

<?php
$array1 = ['A' => 100, 'B' => 200];
$array2 = ['a' => 100, 'b' => 300];

$result = array_udiff_uassoc(
    $array1,
    $array2,
    function($v1, $v2) {
        return $v1 - $v2;
    },
    function($k1, $k2) {
        return strcasecmp($k1, $k2); // 大文字小文字を区別しない比較
    }
);

print_r($result);
// 結果: ['B' => 200]
?>

キー比較を大文字小文字を区別しないようにして、値の差分を判定しています。 ‘B’ と ‘b’ はキーとして同じとみなされ、値が200と300で異なるため差分として残っています。

複数配列との比較

<?php
$array1 = ['x' => 5, 'y' => 10];
$array2 = ['x' => 5, 'y' => 15];
$array3 = ['x' => 6, 'y' => 10];

$result = array_udiff_uassoc(
    $array1,
    $array2,
    $array3,
    function($v1, $v2) {
        return $v1 - $v2;
    },
    function($k1, $k2) {
        return strcmp($k1, $k2);
    }
);

print_r($result);
// 結果: ['y' => 10]
?>

ここでは、$array1 を $array2 と $array3 の両方と比較します。キーが同じでも値がすべての配列で一致しない要素が抽出されます。

関連する関数

  • array_diff – 値の単純な差分を取得
  • array_diff_assoc – キーと値の両方を比較して差分取得
  • array_udiff – 値をユーザー定義関数で比較し差分取得
  • array_uassoc – キーをユーザー定義関数で比較(差分でなく結合に使用)

まとめ

array_udiff_uassoc は、配列のキーおよび値をユーザー定義の比較関数でチェックし、より柔軟に差分を抽出できる強力な関数です。単純なキー・値の差分では対応できない複雑なルールで比較したい場合に役立ちます。特にキーの比較・値の比較共に独自の基準があるケースでおすすめです。複数配列とも比較可能なので実務でも差集合の判定に汎用的に使うことができます。