PHPでは、 array_diff_uassoc()関数を使用して2つの配列間の違いを比較し、キーを比較するルールをカスタマイズできます。この関数の基本的な構文は次のとおりです。
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
$ array1は最初の配列です。
$ array2は2番目の配列であり、 $ array1と比較されます。
$ key_compare_funcは、2つのキーを比較するコールバック関数です。
array_diff_uassoc()関数は、$ array1に存在するが$ array2に存在しない要素を含む配列を返します。その比較は、キー名に基づいています(カスタムコールバック関数を使用)。ただし、いくつかの質問に遭遇する可能性があります。Key_compare_funcの返品値が0 、 -1 、または1の場合、これらの異なる返品値は関数の結果にどのような影響を与えますか?
key_compare_funcコールバック関数が0を返す場合、2つのキーが等しいことを意味します。 array_diff_uassoc()関数では、これは、 $ array1と$ array2の現在のキー値のペアがキー名に違いがないことを意味します。したがって、これらのキー価値ペアは違いの一部とは見なされず、返された結果アレイには表示されません。
例:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'banana' => 'yellow'
];
function compare_keys($key1, $key2) {
return 0; // 2つのキーが同じであることを示します
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
出力:
Array
(
[apple] => red
)
説明: Compare_Keys()が0を返すため、 AppleとBananaが等しいキー名を意味します。Array_diff_uassoc ()は違いがないと考えているため、リターンアレイには重要なAppleに対応する値「赤」のみが含まれます。
key_compare_funcが-1を返す場合、 $ array1のキーが$ array2のキーよりも小さいことを意味します。この場合、 array_diff_uassoc()は、 $ array1の現在のキーペアが$ array2でまったく同じキーが見つからないため、保持する必要があると考えています。したがって、これらのキー価値ペアが結果アレイに表示されます。
例:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'cherry' => 'red'
];
function compare_keys($key1, $key2) {
return -1; // 急行 key1 未満 key2
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
出力:
Array
(
[banana] => yellow
)
説明: compare_keys()は-1を返すため、キーアップルがキーチェリーよりも小さいことを示しているため、バナナは$ array1に対応するキーペアを見つけられないため、バナナに対応するキー値ペアが結果アレイに表示されます。
key_compare_funcが1を返す場合、 $ array1のキーが$ array2のキーよりも大きいことを意味します。この時点で、 array_diff_uassoc()は、 $ array1の現在のキー値ペアを冗長であると考慮しているため、結果アレイから除外されます。
例:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'banana' => 'yellow'
];
function compare_keys($key1, $key2) {
return 1; // 急行 key1 より大きい key2
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
出力:
Array
(
[apple] => red
)
説明:この例では、 Compare_Keys()が1を返し、重要なリンゴがキーバナナよりも大きいことを示します。したがって、 Appleのキー価値ペアは、 $ array2とまったく同じキーペアである$ array1には見られず、返された配列に表示されます。
array_diff_uassoc()を使用する場合、コールバック関数の戻り値0 、 -1 、および1は、キーの比較方法に直接影響します。
return 0 :キーが等しく、現在のキー値ペアが違いとは見なされないことを意味します。
return -1 : $ array1のキーが$ array2のキーよりも小さく、現在のキー値ペアが結果アレイに表示されることを意味します。
return 1 : $ array1のキーが$ array2のキーよりも大きく、現在のキー値ペアが除外されることを意味します。
コールバック関数の比較ロジックを調整することにより、比較ルールを柔軟に制御し、それによりカスタマイズされた違いの比較を実現できます。