現在の位置: ホーム> 最新記事一覧> コールバックを使用して、キー名の「無知ケース」の比較ロジックを実装する

コールバックを使用して、キー名の「無知ケース」の比較ロジックを実装する

M66 2025-05-15

PHPでは、 array_diff_ukey()は、2つ以上の配列の「キー名」を比較し、最初の配列の要素の要素を返す非常に実用的な関数です。

通常、この関数はコールバック関数を使用して、キー名の比較方法をカスタマイズします。ただし、デフォルトのキー名の比較はケースに敏感です。つまり、 「キー」「キー」は2つの異なるキー名と見なされます。

しかし、比較のためにケースを無視したい場合はどうでしょうか(つまり、 「キー」「キー」は同じキーと見なされます)?答えは、カスタムコールバック関数を使用して、ケース非感受性比較ロジックを実装することです。

サンプルコード

以下は、array_diff_ukey()を使用する方法を示し、キー名を比較するときにケースを無視するコールバック関数を示します。

 <?php

$array1 = [
    "UserID" => 1,
    "Email" => "user1@m66.net",
    "Name" => "Alice"
];

$array2 = [
    "userid" => 2,
    "email" => "user2@m66.net"
];

// カスタム比較関数:ケースの比較を無視します
function compareKeysCaseInsensitive($key1, $key2) {
    return strcasecmp($key1, $key2); // 戻る0平等を示します
}

$result = array_diff_ukey($array1, $array2, "compareKeysCaseInsensitive");

print_r($result);

出力結果

Array
(
    [Name] => Alice
)

上記のように、 $ array1ユーザーID電子メールがありますが、 $ array2ユーザーID電子メールがあるため、それらはケースを無視した後に等しく、したがって結果から除外されます。

最終的には、名前のみが残っています。なぜなら、「キー名が等しい(ケースを無視)」を持つアイテムがないためです。

要約します

配列を処理するときにキー名を比較する必要があるが、ケースの違いを無視したい場合、 array_diff_ukey()strcasecmp()で非常に簡潔で強力な組み合わせです。

  • array_diff_ukey()を使用してキー名を比較します

  • strcasecmp()をコールバック関数として使用して、ケース非感受性比較ロジックを実装します

これは、ユーザーの入力、データベースのフィールド名、またはケースで異なるかもしれないがセマンティックな一貫性のあるデータを処理する場合に特に便利です。

この記事がPHPアレイ関数を理解して使用するのに役立つことを願っています!