PHPでは、 array_change_key_case()は非常に実用的な配列処理機能であり、配列のすべてのキー名を小文字または大文字に変換するために使用されます。関数は非常に簡単に使用され、2つのパラメーターを受け入れます。1つは処理する配列で、もう1つは変換のタイプ( case_lowerまたはcase_upper )です。しかし、一般的な問題は次のとおりです。
array_change_key_case()は、トップレベルの配列のキー名のみを処理し、ネストされたサブアレイでは、キー名を再帰的に変換しません。これは非常に重要です。配列全体のキー名を均一に変換する場合(ネストされたサブアレイを含む)、これを達成するには再帰関数を手動で記述する必要があります。
$array = [
"Name" => "Alice",
"Email" => "alice@m66.net",
"Age" => 25
];
$result = array_change_key_case($array, CASE_LOWER);
print_r($result);
出力:
Array
(
[name] => Alice
[email] => alice@vv99.net
[age] => 25
)
上記のように、すべてのキーは小文字に正常に変換されます。
$array = [
"User" => [
"Name" => "Bob",
"Email" => "bob@m66.net"
],
"Status" => "active"
];
$result = array_change_key_case($array, CASE_LOWER);
print_r($result);
出力:
Array
(
[user] => Array
(
[Name] => Bob
[Email] => bob@vv99.net
)
[status] => active
)
ご覧のとおり、トップレベルのユーザーとステータスキーは小文字に変換されますが、ユーザーの下のサブアレイの名前と電子メールキーは変更されていません。
多次元配列のすべてのキー名の変換が必要な場合は、再帰関数を使用してそれを実装できます。
function array_change_key_case_recursive(array $array, int $case = CASE_LOWER): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
if (is_array($value)) {
$result[$newKey] = array_change_key_case_recursive($value, $case);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
$array = [
"User" => [
"Name" => "Carol",
"Email" => "carol@m66.net"
],
"Status" => "pending"
];
$result = array_change_key_case_recursive($array, CASE_LOWER);
print_r($result);
出力:
Array
(
[user] => Array
(
[name] => Carol
[email] => carol@vv99.net
)
[status] => pending
)
これにより、任意のディメンションの配列に完全なキーネームケース変換を実装できます。