PHPでは、 array_change_key_case()関数を使用して、Array内のすべてのキーのケースを変更します。アレイのすべてのキーを小文字または大文字に変換できます。デフォルトでは小文字になります。この関数は、特にクエリによって返される多次元配列で、データベースクエリの結果を処理する際に非常に重要な役割を果たすことができます。
通常、データベースクエリの結果は多次元配列であり、各配列要素はレコードを表し、各レコードのキー名は通常、データベーステーブルフィールドの名前です。データベーステーブルのフィールド名が異なるケース形式(ユーザー名、ユーザー名、ユーザー名など)を使用している場合、これらのキーにアクセスするときに均一なケース形式が必要になる場合があります。これにより、エラーや混乱を避けることができます。
たとえば、データベースで次のクエリを実行するとします。
$query = "SELECT UserName, EmailAddress FROM Users";
$result = mysqli_query($connection, $query);
クエリを実行した後、結果セットは次のようなものかもしれません。
Array(
[0] => Array(
[UserName] => 'john_doe',
[EmailAddress] => 'john@example.com'
),
[1] => Array(
[UserName] => 'jane_doe',
[EmailAddress] => 'jane@example.com'
)
)
この結果セット配列では、2つのキーユーザー名と電子メールアドレスの場合は一貫性がありません。フィールド名のケースを統合する場合は、 array_change_key_case()を使用してそれを達成できます。
array_change_key_case()関数は、データベースクエリの結果のキーのケースをすばやく統合するのに役立ち、将来このデータにアクセスすると、より便利でエラーが発生しやすくなります。
たとえば、配列内のすべてのキーを小文字に変換する場合は、次のコードを使用できます。
$result = mysqli_query($connection, $query);
$resultArray = mysqli_fetch_all($result, MYSQLI_ASSOC);
// すべてのキーを小文字に変換します
$resultArray = array_map(function($item) {
return array_change_key_case($item, CASE_LOWER);
}, $resultArray);
// 処理後に結果を出力します
print_r($resultArray);
小文字に配列キーを統合した後、元のクエリ結果は次のようになります。
Array(
[0] => Array(
[username] => 'john_doe',
[emailaddress] => 'john@example.com'
),
[1] => Array(
[username] => 'jane_doe',
[emailaddress] => 'jane@example.com'
)
)
ご覧のとおり、すべてのキーは小文字に変換されており、一貫性のないケースによって引き起こされるエラーや混乱を回避できます。
一部のURLがクエリ結果(ユーザーのアバターURLなど)に含まれていると仮定すると、URLのドメイン名も必要になる場合があります。たとえば、クエリの結果に次のようなデータがあるとします。
Array(
[0] => Array(
[UserName] => 'john_doe',
[AvatarURL] => 'http://oldsite.com/images/john.jpg'
),
[1] => Array(
[UserName] => 'jane_doe',
[AvatarURL] => 'http://oldsite.com/images/jane.jpg'
)
)
アバターURLのドメイン名を新しいドメイン名( M66.netなど)に置き換えることができる場合があります。そのため、 array_map()を使用して、各レコードを処理するURLをトラバースできます。
$result = mysqli_query($connection, $query);
$resultArray = mysqli_fetch_all($result, MYSQLI_ASSOC);
// すべてのキーを小文字に変換します并交換するURLドメイン名
$resultArray = array_map(function($item) {
$item = array_change_key_case($item, CASE_LOWER);
// 交換するAvatarURL的ドメイン名
if (isset($item['avatarurl'])) {
$item['avatarurl'] = str_replace('oldsite.com', 'm66.net', $item['avatarurl']);
}
return $item;
}, $resultArray);
// 処理後に結果を出力します
print_r($resultArray);
処理後、クエリ結果のURLは新しいドメイン名に置き換えられます。