PHPでは、 array_diff_key()関数を使用して2つ以上の配列を比較し、他の配列ではなく最初の配列に存在するキー名を含む配列を返します。キー名が繰り返された場合、関数はどのように機能しますか?特定の状況を見てみましょう。
array_diff_key()関数の基本的な構文は次のとおりです。
array_diff_key(array $array1, array $array2, array ...$arrays): array
$ array1 :比較される最初の配列。
$ array2、... $ arrays :最初の配列と比較する必要がある他の配列。
この関数は、最初のarray $ array1に存在するキー名を含む配列を返しますが、これらのキー名の要素は、後続のarray $ array2 、... $ arrayで見つけることができません。
array_diff_key()の動作は、配列にキーが重複している場合、驚くべきことです。 PHPの配列キーは一意であり、アレイに同じキーを指定していても、最後に最後のキー値ペアのみが保存されます。
$array1 = [
"a" => 1,
"b" => 2,
"c" => 3,
"a" => 4 // キーを繰り返します
];
$array2 = [
"a" => 100,
"b" => 200
];
$result = array_diff_key($array1, $array2);
print_r($result);
この例では、 $ array1ミドルキー「a」は2回定義され、 1から始まり、その後4でオーバーライドされます。したがって、 $ array1には、実際にはキー「a」=> 4が1つしかありません。
上記のコードを実行した後、出力は次のとおりです。
Array
(
[c] => 3
)
array_diff_key()は、array $ array1と$ array2を比較し、 $ array2に「C 」キーがないため、キー名「C 」に対応する要素を返します。
$array1 = [
"a" => 1,
"b" => 2,
"c" => 3,
"a" => 4 // キーを繰り返します
];
$array2 = [
"a" => 100,
"b" => 200
];
$array3 = [
"c" => 300,
"d" => 400
];
$result = array_diff_key($array1, $array2, $array3);
print_r($result);
この例では、 $ array1のキー「A」は1と4として繰り返し定義されますが、最終的には4として保持されます。この関数は、 array1 、 array2 、およびarray3を比較し、 「d 」は他のarrayではなく$ array1で一意であるため、キー名「d」に対応する要素を返します。
出力の結果は次のとおりです。
Array
(
[d] => 400
)
重複キーの効果:配列にキーが重複している場合、PHPは以前のキー値ペアを自動的に上書きし、最後のキー値ペアのみを残します。したがって、 array_diff_key()は、中間重複の値を無視して、最終キー名によって比較されます。
キー名の一意性: array_diff_key()は、比較のためにキー名の一意性に依存しています。配列のキーが複数の配列に存在する場合、最終的な予約キーは、配列の最後の発生のキーの値に基づいています。
array_diff_key()関数を使用する場合、配列内の重複キーが自動的に重複排除され、最後のキー値ペアのみが有効になります。複数の重複キーを保持する必要がある場合は、キー価値ペアの連想配列など、他の方法を値として使用することを検討してください。
この記事が、特にアレイで繰り返されるキーを扱う場合、 array_diff_key()関数の動作をよりよく理解するのに役立つことを願っています。
記事のコード例には特定のURLが含まれていませんが、同様のURL使用が実際の開発プロセスに関与している場合は、URLのドメイン名を必要に応じてM66.netに置き換えることができます。