現在の位置: ホーム> 最新記事一覧> array_diff_ukey()とarray_diff_key()の違い

array_diff_ukey()とarray_diff_key()の違い

M66 2025-05-15

PHPでは、 array_diff_ukey()およびarray_diff_key()は、配列のキー名とキー名の違いを返すために使用される関数です。これら2つの関数の関数は非常に似ていますが、それらの使用方法にはいくつかの大きな違いがあります。この記事では、これら2つの機能の違いを詳細に説明し、実際の開発にそれらの応用を示します。

1。ARRAY_DIFF_KEY ()関数

array_diff_key()関数は、2つ以上の配列のキー名を比較するために使用され、最初の配列に存在するが他の配列には存在するキー名とキー値のペアを返します。つまり、キー名が他の配列に存在しないすべての要素を返します。

文法:

 array_diff_key(array $array1, array $array2, array ...$arrays): array

サンプルコード:

 $array1 = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];

$array2 = [
    'b' => 5,
    'd' => 6
];

$result = array_diff_key($array1, $array2);
print_r($result);

出力:

 Array
(
    [a] => 1
    [c] => 3
)

この例では、 array_diff_key()関数は、array $ array1に存在するが、 $ array2には存在しないキー値ペアを返します。

2。ARRAY_DIFF_UKEY ()関数

array_diff_ukey()関数はarray_diff_key()に似ていますが、ユーザーはコールバック関数を渡してキー名を比較することができます。これにより、特にカスタムキー名の比較ルールが必要な場合は、ユーザーがより柔軟になります。

文法:

 array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array

サンプルコード:

 $array1 = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];

$array2 = [
    'A' => 5,
    'B' => 6
];

// カスタムキー名の比較関数
$key_compare_func = function ($key1, $key2) {
    return strtolower($key1) <=> strtolower($key2);
};

$result = array_diff_ukey($array1, $array2, $key_compare_func);
print_r($result);

出力:

 Array
(
    [c] => 3
)

この例では、 array_diff_ukey()は、カスタムコールバック関数に基づいてキー名を比較します。コールバック関数は、 strtolowerを使用してキー名を小文字と比較し、結果は$ array2に同じ小文字キー名がないため、キー名C要素のみを返します。

3。主な違い

  1. キー名の比較方法:

    • array_diff_key()は、 PHPのデフォルト比較方法を直接使用して、配列のキー名を比較します。

    • array_diff_ukey()を使用すると、ユーザーはキー名の比較ルールをカスタマイズでき、コールバック関数を渡すことでカスタムキー名の比較を実装できます。

  2. 柔軟性:

    • array_diff_key()は、カスタムキー名の比較ルールを許可していません。その比較は、PHPのデフォルトの平等比較に基づいています。

    • array_diff_ukey()はより柔軟であり、コールバック関数を介してカスタムキー名比較方法を定義できます。

  3. アプリケーションシナリオ:

    • array_diff_key()は、キー名が直接等しい場合に適しています。

    • array_diff_ukey()は、キー名が上限症例や小文字を無視するなど、いくつかのアルゴリズムなどを比較するなど、カスタム比較ルールを必要とする状況に適しています。

4。実用的なアプリケーション

実際の開発では、 array_diff_key()は、使いやすく、ほとんどの一般的な配列比較シナリオに適しているため、より一般的に使用されています。 array_diff_ukey()は、キー名のケースを無視したり、他のカスタム比較操作を実行したりするなど、特別なニーズに適しています。

例:ケースの比較を無視します

キー名が実際に同じである2つの配列があると仮定しますが、1つの配列には大文字があり、もう1つの配列は小文字です。この場合、 array_diff_ukey()を使用して、ケースを無視してキー名を比較できます。

 $array1 = [
    'apple' => 1,
    'banana' => 2
];

$array2 = [
    'APPLE' => 3,
    'BANANA' => 4
];

// ケースの比較を無視します
$key_compare_func = function ($key1, $key2) {
    return strtolower($key1) <=> strtolower($key2);
};

$result = array_diff_ukey($array1, $array2, $key_compare_func);
print_r($result);

出力:

 Array
(
)

この例では、キー名はAppleAppleが同じと見なされるため、結果は空の配列を返し、2つの配列のキー名に違いがないことを示します。

5。概要

  • array_diff_key()は、通常のキー名の違いに適した、配列のキー名を比較するためのシンプルで直接的な方法です。

  • array_diff_ukey()は、特別な比較ロジックが必要なシナリオに適したカスタムキー名の比較ルールを可能にする柔軟性を高めます。

  • 選択する機能は、ニーズに依存します。キー名の直接的な平等を比較するだけである場合、 array_diff_key()で十分です。より複雑な比較ルールが必要な場合、 array_diff_ukey()がより良い選択です。