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アレイ関数を理解して使用するのに役立つことを願っています!