【PHP8.x】array_change_key_case関数の使い方
array_change_key_case関数は、指定された配列のすべての文字列キーを大文字または小文字に変換した新しい配列を生成する関数です。この関数は、主に外部から取得したデータや、異なる命名規則を持つ複数のデータソースを扱う際に、配列のキーを統一して処理を簡素化したい場合に役立ちます。
この関数は二つの引数を取ります。最初の引数は、キーの変換を行いたい対象の配列です。二番目の引数は、キーをどのようなケースに変換するかを指定する整数値で、PHPの組み込み定数であるCASE_UPPER
(キーをすべて大文字に変換)またはCASE_LOWER
(キーをすべて小文字に変換)のいずれかを使用します。
処理の結果として、キーが指定されたケースに変換された新しい配列が返されます。この際、元の配列は一切変更されず、新しい配列が独立して生成される点が重要です。
重要な注意点として、数値型のキーは変換の対象外となり、そのまま保持されます。また、多次元配列をこの関数に渡した場合、変換は配列のトップレベルのキーに対してのみ行われ、ネストされた配列の内部キーには影響を与えません。これらの特性を理解することで、意図しない変換を防ぎ、正確なデータ処理を実現できます。
基本的な使い方
構文(syntax)
<?php
// キーの大文字小文字を変更したい配列を用意します。
$originalArray = [
'FirstName' => 'John',
'lastName' => 'Doe',
'CITY' => 'New York'
];
// 配列のすべてのキーを小文字に変換します。
// CASE_LOWER はデフォルトなので省略も可能ですが、明示的に指定することで意図が明確になります。
$arrayWithLowercaseKeys = array_change_key_case($originalArray, CASE_LOWER);
// 例: $arrayWithLowercaseKeys は ['firstname' => 'John', 'lastname' => 'Doe', 'city' => 'New York'] となります。
// 配列のすべてのキーを大文字に変換します。
$arrayWithUppercaseKeys = array_change_key_case($originalArray, CASE_UPPER);
// 例: $arrayWithUppercaseKeys は ['FIRSTNAME' => 'John', 'LASTNAME' => 'Doe', 'CITY' => 'New York'] となります。
引数(parameters)
array $array, int $case = CASE_LOWER
- array $array: キーのケースを変更したい連想配列または配列
- int $case = CASE_LOWER: キーを変換するケースを指定します。
CASE_UPPER
またはCASE_LOWER
を使用します。デフォルトはCASE_LOWER
です。
戻り値(return)
array
指定されたキーの大文字・小文字を変換した新しい連想配列を返します。
サンプルコード
PHP array_change_key_case 関数で配列キーを変換する
<?php
/**
* array_change_key_case 関数の使用例を示すスクリプト。
* 配列のキーを小文字または大文字に変換する方法を示します。
*/
// 元となる連想配列を定義します。
$originalArray = [
'FirstName' => 'John',
'lastName' => 'Doe',
'Email_Address' => 'john.doe@example.com',
'AGE' => 30,
];
echo "--- 元の配列 ---" . PHP_EOL;
print_r($originalArray);
// キーをすべて小文字に変換します (デフォルトの動作)。
// array_change_key_case() の第2引数を省略すると、CASE_LOWER が適用されます。
$lowerCaseKeysArray = array_change_key_case($originalArray);
echo PHP_EOL . "--- キーを小文字に変換した配列 (CASE_LOWER) ---" . PHP_EOL;
print_r($lowerCaseKeysArray);
// キーをすべて大文字に変換します。
// 第2引数に CASE_UPPER 定数を指定します。
$upperCaseKeysArray = array_change_key_case($originalArray, CASE_UPPER);
echo PHP_EOL . "--- キーを大文字に変換した配列 (CASE_UPPER) ---" . PHP_EOL;
print_r($upperCaseKeysArray);
?>
PHPのarray_change_key_case
関数は、連想配列のキー(要素を識別するための名前)のアルファベット部分を、すべて小文字またはすべて大文字に変換するための関数です。主に、データの一貫性を保つためや、キーの表記揺れを吸収したい場合に利用されます。
この関数は二つの引数を取ります。一つ目の引数$array
には、キーを変更したい元の連想配列を指定します。二つ目の引数$case
はオプションで、キーをどのように変換するかを指定する定数です。デフォルトではCASE_LOWER
が適用され、キーはすべて小文字に変換されます。もしキーをすべて大文字にしたい場合は、CASE_UPPER
定数を指定します。この関数は、キーが変更された新しい配列を戻り値として返します。元の配列自体は変更されません。
サンプルコードでは、まず$originalArray
という連想配列が定義されています。
array_change_key_case($originalArray)
のように第2引数を省略して呼び出すと、キーがすべて小文字になった$lowerCaseKeysArray
が生成されます。例えば、元の配列の「FirstName」は「firstname」に、「Email_Address」は「email_address」に変換されます。
次に、array_change_key_case($originalArray, CASE_UPPER)
と呼び出すと、キーがすべて大文字になった$upperCaseKeysArray
が生成されます。この場合、「FirstName」は「FIRSTNAME」に、「lastName」は「LASTNAME」に変換されます。
このように、array_change_key_case
関数を使うことで、配列のキーの文字種を簡単に統一できます。
この関数は、配列の文字列キーを全て小文字または大文字に変換し、新しい配列として返します。元の配列は変更されません。
特に注意すべきは、変換によってキーの重複が発生する可能性です。例えば、元の配列に'Key'
と'key'
というキーが両方存在し、これらを小文字に変換すると、どちらも'key'
となり、値が上書きされてしまいます。この場合、元のキーと値のペアの一部が失われる可能性がありますので、キーの重複を考慮した利用が必要です。
数値キーは変換対象外です。また、多次元配列のネストされた配列のキーは変換されず、第一階層のキーのみが影響を受けます。結果を利用するには、新しい変数に代入してください。
PHPで多次元配列のキーを再帰的に変換する
<?php
declare(strict_types=1);
/**
* 配列のキーを再帰的に小文字または大文字に変換します。
*
* PHPの標準関数 `array_change_key_case()` は配列の第一階層のキーしか変換しません。
* この関数は、多次元配列のすべての階層にあるキーを対象に変換処理を行います。
*
* @param array $array 変換対象の多次元配列
* @param int $case 変換後のキーの形式。CASE_LOWER (デフォルト) または CASE_UPPER
* @return array キーが変換された新しい配列
*/
function array_change_key_case_recursive(array $array, int $case = CASE_LOWER): array
{
// まず、現在の階層のキーを変換する
$result = array_change_key_case($array, $case);
// 配列の各要素をループで処理する
foreach ($result as $key => $value) {
// もし値が配列であれば、その配列に対してこの関数自身を再度呼び出す (再帰処理)
if (is_array($value)) {
$result[$key] = array_change_key_case_recursive($value, $case);
}
}
return $result;
}
// サンプルとなる多次元配列(キーが大文字・小文字混合)
$user_data = [
'USER_ID' => 101,
'Profile' => [
'NAME' => 'Taro Yamada',
'Contact' => [
'EMAIL' => 'taro.yamada@example.com',
'Phone' => '090-1234-5678'
]
],
'Status' => 'Active'
];
// --- 実行例 ---
// 1. 再帰的にすべてのキーを小文字に変換する (デフォルト)
$lower_case_data = array_change_key_case_recursive($user_data);
// 2. 再帰的にすべてのキーを大文字に変換する
$upper_case_data = array_change_key_case_recursive($user_data, CASE_UPPER);
// --- 結果の出力 ---
echo "■ 元の配列:\n";
print_r($user_data);
echo "\n■ すべてのキーを小文字に変換した配列 (再帰的):\n";
print_r($lower_case_data);
echo "\n■ すべてのキーを大文字に変換した配列 (再帰的):\n";
print_r($upper_case_data);
?>
PHPの標準関数array_change_key_case
は、配列のキーをすべて小文字または大文字に変換できますが、これは配列の第一階層のキーのみに適用されます。多次元配列の全てのキーを変換したい場合には、この関数だけでは不十分です。
サンプルコードのarray_change_key_case_recursive
関数は、この課題を解決するカスタム関数です。この関数は、まず現在の階層のキーをarray_change_key_case
で変換します。次に、変換後の配列の要素が配列であれば、その要素に対し関数自身を再帰的に呼び出します。この再帰的な処理により、多次元配列の全ての階層のキーを確実に指定した形式に変換できます。
引数$array
には変換対象の多次元配列を指定し、$case
にはキーを小文字にするCASE_LOWER
(デフォルト)か、大文字にするCASE_UPPER
を指定します。戻り値としては、キーが変換された新しい配列が返され、元の配列は変更されません。この関数は、データの一貫性を保つためや、異なるシステム間でデータ形式を統一する際など、データ処理を効率化する上で非常に役立ちます。
array_change_key_case
関数は、配列の第一階層にある文字列キーのみを小文字または大文字に変換し、数値キーは変換対象外です。サンプルコードの再帰関数は、多次元配列のすべての階層の文字列キーを変換しますが、非常に深い階層や要素数の多い配列を扱う際には、パフォーマンスへの影響に注意が必要です。
どちらの関数も、元の配列を直接変更するのではなく、キーが変換された新しい配列を返します。そのため、必ず返り値を変数に代入して利用してください。キーの変換形式は、CASE_LOWER
(小文字)やCASE_UPPER
(大文字)といった定数で指定します。また、サンプルコードは厳格な型チェックを導入しているため、引数の型が正しく渡されているか確認することが重要です。