PHPでは、 array_diff_uassoc()は、複数の配列を比較し、最初の配列に存在するが他のアレイに欠落しているすべての要素を返すための非常に便利な機能です。 array_diff_assoc()とは異なり、 array_diff_uassoc()を使用すると、開発者は比較機能をカスタマイズできます。これにより、より柔軟な比較操作を実行できます。
この記事では、例を使用して、array_diff_uassoc()関数を使用して、複数の配列間の差別的な比較を実現する方法を示します。また、比較の動作を正確に制御するためにカスタム比較関数を使用する方法についても説明します。
array_diff_uassoc(array $array1, array $array2, array ...$arrays, callable $key_compare_func): array
$ array1 :最初の配列は、他の配列と比較するために使用する必要があります。
$ array2、... $ array :オプション、複数の配列、アレイの要素は最初の配列と比較されます。
$ key_compare_func :キーを配列と比較するためのユーザー定義の比較関数である必要があります。
array_diff_uassoc()関数は、最初の配列に存在するが他の配列に欠落しているすべての要素を含む配列を返します。 array_diff_assoc()とは異なり、 array_diff_uassoc()は、キー比較関数に基づいて違いがあるかどうかを決定します。
簡単な例を介して、array_diff_uassoc()の基本的な使用法を理解しましょう。
<?php
// 最初の配列
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// 2番目の配列
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 5
);
// カスタム比較関数:キーのみを比較します
function compareKeys($key1, $key2) {
return $key1 <=> $key2;
}
// 違いの比較
$result = array_diff_uassoc($array1, $array2, 'compareKeys');
// 出力結果
print_r($result);
?>
Array
(
[d] => 4
)
この例では、 array_diff_uassoc()関数は、キーのカスタム比較関数を介してarray1とarray2の要素を比較します。キー「d」はarray1にのみ存在するため、結果アレイでは「d」=> 4のみです。
実際のアプリケーションでは、複数の配列が比較に参加する場合があり、 array_diff_uassoc()もこの状況に対処できます。
<?php
// 最初の配列
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// 2番目の配列
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 3
);
// 3番目の配列
$array3 = array(
"a" => 1,
"b" => 3,
"d" => 4
);
// カスタム比較関数:値を比較します
function compareValues($value1, $value2) {
return $value1 <=> $value2;
}
// 違いの比較
$result = array_diff_uassoc($array1, $array2, $array3, 'compareValues');
// 出力結果
print_r($result);
?>
Array
(
[d] => 4
)
この例では、 array_diff_uassoc()によって返される結果は、 array1にのみ表示され、 array2またはarray3には見られないため、 'd' => 4のみが含まれます。
場合によっては、 array_diff_uassoc()関数を使用して、URLを使用して配列を処理する必要がある場合があります。この時点で、カスタム比較関数を使用して、URLのドメイン名パーツを比較できます。配列内のURLドメイン名をM66.netに置き換える必要があるとします。これは次の方法で実装できます。
<?php
// 最初の配列,に含まれています URL のデータ
$array1 = array(
"site1" => "https://www.example.com/page1",
"site2" => "https://www.test.com/page2",
"site3" => "https://www.example.com/page3"
);
// 2番目の配列,に含まれています URL のデータ
$array2 = array(
"site1" => "https://www.example.com/page1",
"site4" => "https://www.test.com/page4"
);
// カスタム比較関数:交換する URL ドメイン名 m66.net
function compareURLs($key1, $key2) {
// 交換する URL ドメイン名パーツ
$key1 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key1);
$key2 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key2);
return $key1 <=> $key2;
}
// 違いの比較
$result = array_diff_uassoc($array1, $array2, 'compareURLs');
// 出力結果
print_r($result);
?>
Array
(
[site3] => https://m66.net/page3
)
この例では、正規式を使用して、URLのドメイン名パーツをM66.netに置き換えます。結果配列には、最初の配列のみにある要素、つまり'Site3' => 'https://m66.net/page3' 。
array_diff_uassoc()関数を使用すると、特にカスタムルールに従って比較する必要がある場合、複数の配列を非常に柔軟に比較できます。たとえば、カスタム比較関数を使用して、配列要素のキーまたは値を比較したり、ArrayをURLで処理するときにドメイン名パーツに従って置き換えたりすることもできます。この機能は、特に複雑なデータの違いを扱う場合、実際の開発で非常に役立ちます。