【PHP8.x】array_diff_uassoc関数の使い方
作成日: 更新日:
array_diff_uassoc関数は、最初の配列とそれ以降の複数の配列を比較し、最初の配列にのみ存在する要素を返す関数です。この関数は、配列の要素を比較する際に、そのキーと値の両方を使用します。特に、キーの比較にはユーザーが定義したコールバック関数を用いる点が特徴です。
コールバック関数は、比較する2つのキーを引数として受け取り、それらのキーが等しいかどうかを示す整数値を返します。具体的には、0を返した場合はキーが等しいと判断され、0より小さい値を返した場合は最初のキーが2番目のキーより小さいと、0より大きい値を返した場合は最初のキーが2番目のキーより大きいと判断されます。これにより、標準の比較では難しい、複雑なキーの比較ロジックを柔軟に適用できます。
一方、要素の値の比較は、内部的に標準の比較演算子(==
)によって行われます。この関数は、キーの比較方法を細かくカスタマイズしたい場合に非常に有効です。例えば、キーがオブジェクトであったり、特定のルールに基づいてキーの同一性を判断する必要がある場合に、そのカスタムロジックをコールバック関数として提供することで、期待通りの配列差分を効率的に抽出することが可能です。
基本的な使い方
構文(syntax)
<?php
$array1 = ["apple" => "red", "banana" => "yellow", "orange" => "orange"];
$array2 = ["apple" => "green", "grape" => "purple"];
// キーを比較するためのユーザー定義コールバック関数
// この関数は2つのキーを受け取り、比較結果を整数で返します。
// 0: キーが等しい場合
// 負の値: 最初のキーが2番目のキーより小さい場合
// 正の値: 最初のキーが2番目のキーより大きい場合
function compareKeys($keyA, $keyB) {
if ($keyA === $keyB) {
return 0;
}
return ($keyA > $keyB) ? 1 : -1;
}
// array_diff_uassoc() は、array1 にあり、かつ array2 に存在しない要素を返します。
// キーの比較には、ユーザー定義の 'compareKeys' 関数が使用されます。
$result = array_diff_uassoc($array1, $array2, 'compareKeys');
print_r($result);
?>
引数(parameters)
array $array, array ...$arrays, callable $key_compare_func
- array $array: 比較対象となる配列
- array ...$arrays: 比較対象となる追加の配列(複数指定可能)
- callable $key_compare_func: 配列のキーを比較するために使用するコールバック関数
戻り値(return)
array
指定されたキーと値の比較関数を用いて、配列から差分を計算した結果の配列を返します。