PHPでは、配列のキー名はデフォルトでケースに敏感です。これは、2つの配列がある場合、1つはuserIDのキーを備えたアレイ、もう1つはuserIDを使用している場合、PHPはそれらを2つの異なるキーと見なすことを意味します。配列のキー名を実行する場合は、 array_change_key_case()とarray_diff_key()を組み合わせて使用できます。
array_change_key_case(array $ array、int $ case = case_lower) :配列のすべてのキー名を小文字または大文字に変換します。
array_diff_key(array $ array1、array $ array2) :2つ以上の配列のキー名を比較し、他の配列にない最初のアレイのキー価値ペアを返します。
最初にarray_change_key_case()を使用して2つの配列のキー名を小文字(または大文字)に統合することで、 array_diff_key()を使用して、ケースに依存しないキー名の比較を実現できます。
<?php
// オリジナル配列
$array1 = [
'UserID' => 1,
'UserName' => 'Alice',
'Email' => 'alice@m66.net',
];
$array2 = [
'userid' => 2,
'username' => 'Bob',
'Phone' => '1234567890',
];
// 両方の配列キーを小文字に変換します
$lower1 = array_change_key_case($array1, CASE_LOWER);
$lower2 = array_change_key_case($array2, CASE_LOWER);
// 探し出す $array1 それら $array2 キーはありません(ケースを無視します)
$diffKeys = array_diff_key($lower1, $lower2);
// 差動キー名と対応する値を出力します
print_r($diffKeys);
?>
Array
(
[email] => alice@m66.net
)
上記の例に示すように、 UserIDとユーザー名は2つの配列に異なるキー名を持っていますが、コンテンツロジックは同じです。 array_change_key_case()変換後、 array_diff_key()はそれらを同じキーとして扱います。電子メールのみが$ array2に表示されないため、保持されます。
元の配列のキー名形式(ケース)を保持する必要がある場合は、まず比較のためにキー名変換の結果を使用してから、元の配列から対応するキー値を抽出することができます。
この組み合わせは、フォームの提出中のフィールド検証やAPIリクエストなど、ユーザーが入力した動的データを処理するのに最適です。
array_diff_key()を使用することにより、キー名が均一にケースになった後、ケースに依存しないキー名の比較ロジックを優雅に実装できます。この方法はシンプルで効率的であり、マルチソースのデータ比較を扱う際の実用的なスキルです。