(PHP 5, PHP 7, PHP 8)
array_diff_uassoc — ユーザーが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する
array
のキーを arrays
のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 配列のキーを用いて比較するという点が異なります。
array_diff_assoc() とは異なり、 内部関数ではなくユーザーが指定したコールバック関数を用いて添字を比較します。
array
比較元の配列。
arrays
比較する対象となる配列。
key_compare_func
比較関数は、最初の引数と二番目の引数の比較結果を返します。最初の引数のほうが二番目の引数より大きい場合は正の整数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の整数を返す必要があります。
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");
のようにすることで、より深い次元でのチェックもできます。