array_diff_uassoc

ユーザーが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する

説明

array array_diff_uassoc(array $array, array ...$arrays, callable $key_compare_func)

array のキーを arrays のキーと比較し、その差を返します。 この関数は array_diff に似ていますが、 配列のキーを用いて比較するという点が異なります。

array_diff_assoc とは異なり、 内部関数ではなくユーザーが指定したコールバック関数を用いて添字を比較します。

パラメータ

array

比較元の配列。

arrays

比較する対象となる配列。

key_compare_func

比較関数は、最初の引数と二番目の引数の比較結果を返します。最初の引数のほうが二番目の引数より大きい場合は正の整数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の整数を返す必要があります。

int callback(mixed $a, mixed $b)
警告

float のような 非整数 を比較関数が返すと、その返り値を内部的に int にキャストして使います。 つまり、0.990.1 といった値は整数値 0 にキャストされ、 値が等しいとみなされます。

戻り値

array の要素のうち、 その他の配列のいずれにも含まれないものだけを残した配列を返します。

例1 array_diff_uassoc の例

この例では、"a" => "green" の組み合わせが両方の配列に存在し、 関数の出力には存在しないことが確認できます。 これとは異なり、0 => "red" は出力されています。 これは、最初の配列の "red" のキーには自動的に 0 が割り当てられる一方で、 二番目の配列では 0 には既に yellow というキーがあるため、 "red" には 1 が割り当てられるためです。

<?php
function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>

上の例の出力は以下となります。

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

2 つのインデックスが等しいかどうかは、 ユーザーが指定したコールバック関数で調べます。

注意

注意:

この関数は n 次元配列の一つの次元しかチェックしません。 array_diff_uassoc($array1[0], $array2[0], "key_compare_func"); のようにすることで、より深い次元でのチェックもできます。

参考

  • array_diff
  • array_diff_assoc
  • array_udiff
  • array_udiff_assoc
  • array_udiff_uassoc
  • array_intersect
  • array_intersect_assoc
  • array_uintersect
  • array_uintersect_assoc
  • array_uintersect_uassoc