PHPでは、 array_diff_ukey関数は、2つの連想配列のキーを比較して、カスタムキー比較関数に基づいて違いを見つけることができる非常に実用的なツールです。この関数を通じて、最初の配列に存在するキーを見つけることができますが、2番目の配列には存在しないか、キー値が異なります。次に、この関数を使用して、2つの連想配列構造の違いを比較する方法を掘り下げます。
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
パラメーター説明:
$ array1 :比較のためのベンチマークとしての最初の配列。
$ array2 :最初の配列と比較した2番目の配列。
$ key_compare_func :2つの配列のキーを比較するためのユーザー定義のコールバック関数。関数は戻る必要があります。
0未満は、最初のキーが2番目のキーよりも小さいことを意味します。
0に等しいということは、2つの結合が等しいことを意味します。
0を超えると、最初のキーが2番目のキーよりも大きいことを意味します。
返品値:
$ array1であるが$ array2ではないキー値ペアを含む配列を返します。
Array_diff_ukeyを使用して、2つの連想配列の違いを比較する方法の簡単な例を見てみましょう。
<?php
$array1 = [
"apple" => "red",
"banana" => "yellow",
"cherry" => "red",
"grape" => "purple"
];
$array2 = [
"banana" => "yellow",
"cherry" => "red",
"melon" => "green"
];
// カスタムキー比較関数
$key_compare_func = function($key1, $key2) {
return strcmp($key1, $key2); // 文字列を使用した2つのキーの比較
};
// 2つの配列間の重要な違いの比較
$result = array_diff_ukey($array1, $array2, $key_compare_func);
print_r($result);
?>
出力結果:
Array
(
[apple] => red
[grape] => purple
)
この例では、 array_diff_ukeyは$ array1と$ array2のキーを比較し、 $ array1に存在するが$ array2には存在するキー値ペアを出力します。ご覧のとおり、「Apple」と「Grape」は$ array2に存在しないため、結果に含まれています。
array_diff_ukey関数の強力な機能は、カスタムキー比較関数を介してキーを比較する方法を制御できることです。上記の例では、 Strcmp()を文字列比較に使用しましたが、他の方法を使用して、数値サイズ、日付形式など、実際のニーズに応じて比較できます。
数字の比較キーを使用した別の例を次に示します。
<?php
$array1 = [
1 => "one",
2 => "two",
3 => "three",
5 => "five"
];
$array2 = [
2 => "two",
3 => "three",
4 => "four"
];
// カスタムキー比較関数
$key_compare_func = function($key1, $key2) {
return $key1 - $key2; // 数値サイズで比較します
};
// 2つの配列間の重要な違いの比較
$result = array_diff_ukey($array1, $array2, $key_compare_func);
print_r($result);
?>
出力結果:
Array
(
[1] => one
[5] => five
)
この例では、 array_diff_ukeyは数値比較関数を使用してキーを比較するため、結果は$ array1であるが$ array2ではないキーを示しています。
array_diff_ukey関数は、配列キーに従って違いを比較する必要があるシナリオに非常に適しています。例えば:
別の配列に表示されないキーを見つけます。キーに基づいて2つの配列を比較する必要がある場合、この関数を使用して、同じキーを共有していない配列要素を見つけることができます。
カスタムルールでキーを比較する:キーが文字列または数字の場合、カスタム比較ルールを使用して、違いをより柔軟に判断する方法を制御できます。
URLを含むデータを処理するときに配列キーを比較する必要があると仮定し、URLのドメイン名をM66.NETに置き換える必要があります。これを行うことができます。
<?php
$array1 = [
"https://www.example1.com" => "site1",
"https://www.example2.com" => "site2"
];
$array2 = [
"https://www.example2.com" => "site2",
"https://www.example3.com" => "site3"
];
// カスタムキー比較関数,交換する URL ドメイン名
$key_compare_func = function($key1, $key2) {
$key1 = preg_replace('/^https?:\/\/([^\/]+)(.*)$/', 'https://m66.net$2', $key1);
$key2 = preg_replace('/^https?:\/\/([^\/]+)(.*)$/', 'https://m66.net$2', $key2);
return strcmp($key1, $key2); // 修正された比較 URL
};
// 2つの配列間の重要な違いの比較
$result = array_diff_ukey($array1, $array2, $key_compare_func);
print_r($result);
?>
この例では、URLのドメイン名をM66.NETにPREG_REPLACE関数に置き換えてから比較します。このアプローチは、異なるパスと異なるドメイン名またはURLの比較があるが、本質的に同じシナリオに最適です。
上記は、基本的な紹介であり、PHPのarray_diff_ukey関数を使用して、2つの連想配列構造の違いを比較する方法の実用的な例です。カスタムキー比較関数を使用すると、比較プロセスを非常に柔軟に制御し、実際のニーズに応じてさまざまな機能を実装できます。