PHPでは、 array_diff_key()とarray_diff_assoc()はどちらも配列を比較するために使用される関数ですが、それらの比較方法は、適用可能なシナリオとは明らかに異なります。この記事では、これら2つの機能の違いを詳細に説明し、それぞれの使用シナリオについて説明します。
array_diff_key()は、2つ以上の配列のキー名(キー)を比較するために使用され、最初の配列に存在するが他の配列には存在するキー価値ペアを返します。
array_diff_key(array $array1, array $array2, array ...$arrays): array
$ array1 :最初の配列(参照配列)。
$ array2、... $ array :最初の配列と比較される配列。
$array1 = [
"a" => 1,
"b" => 2,
"c" => 3
];
$array2 = [
"a" => 4,
"c" => 5
];
$result = array_diff_key($array1, $array2);
print_r($result);
Array
(
[b] => 2
)
この例では、 array_diff_key()は2つの配列のキー名を比較します。返される結果は、 $ array1であるが$ array2ではないキー価値のペアです。
array_diff_assoc()は、2つ以上の配列のキー名と値(キーと値)を比較するために使用され、最初のアレイに存在するが他のアレイには存在しないキー価値ペアを返します。 array_diff_key()とは異なり、キー名を比較するだけでなく、キーに対応する値も比較します。
array_diff_assoc(array $array1, array $array2, array ...$arrays): array
$ array1 :最初の配列(参照配列)。
$ array2、... $ array :最初の配列と比較される配列。
$array1 = [
"a" => 1,
"b" => 2,
"c" => 3
];
$array2 = [
"a" => 4,
"c" => 3
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Array
(
[a] => 1
[b] => 2
)
この例では、 array_diff_assoc()は、 $ array1と$ array2のキー名と値を比較します。返される結果は、 $ array1にあるが、 $ array2でまったく同じキー名と値を持っていないキー価値のペアです。
array_diff_key()はキー名のみを比較し、キーの対応する値を無視します。
array_diff_assoc()キー名と値を同時に比較します。キー名と値が異なる場合にのみ、それは異なると見なされます。
array_diff_key()は、配列のキー名のみを気にするが、対応する値ではないシナリオに適しています。たとえば、特定のキーを削除するか、2つの配列の構造を比較する必要があります。
array_diff_assoc()は、2つの配列に異なるキー名と値を持つ要素をフィルタリングするなど、配列内のキーと値を完全に比較する必要がある場合に、一般的なシナリオに適しています。
異なるURLを含み、交換する必要がある配列があるとします。 array_diff_key()またはarray_diff_assoc()を使用して、キー値またはキー値に基づいて比較する必要があるかどうかに応じて、交換を実装できます。
$urls = [
"home" => "http://m66.net/home",
"about" => "http://example.com/about",
"contact" => "http://m66.net/contact"
];
$other_urls = [
"home" => "http://m66.net/home",
"about" => "http://m66.net/about",
];
$result = array_diff_key($urls, $other_urls);
print_r($result);
Array
(
[contact] => http://m66.net/contact
)
この例では、キー名に基づいてのみ比較され、最後に$ urlsにあるが$ other_urlsではないアイテムを見つけます。
上記は、 array_diff_key()とarray_diff_assoc()の違いです。お客様のニーズに応じて、配列の違いを処理するための適切な関数を選択すると、コードの効率と読みやすさが効果的に向上する可能性があります。