【PHP8.x】array_change_key_case関数の使い方
array_change_key_case関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
array_change_key_case関数は、指定された配列のすべての文字列キーを大文字または小文字に変換した新しい配列を生成する関数です。この関数は、主に外部から取得したデータや、異なる命名規則を持つ複数のデータソースを扱う際に、配列のキーを統一して処理を簡素化したい場合に役立ちます。
この関数は二つの引数を取ります。最初の引数は、キーの変換を行いたい対象の配列です。二番目の引数は、キーをどのようなケースに変換するかを指定する整数値で、PHPの組み込み定数であるCASE_UPPER(キーをすべて大文字に変換)またはCASE_LOWER(キーをすべて小文字に変換)のいずれかを使用します。
処理の結果として、キーが指定されたケースに変換された新しい配列が返されます。この際、元の配列は一切変更されず、新しい配列が独立して生成される点が重要です。
重要な注意点として、数値型のキーは変換の対象外となり、そのまま保持されます。また、多次元配列をこの関数に渡した場合、変換は配列のトップレベルのキーに対してのみ行われ、ネストされた配列の内部キーには影響を与えません。これらの特性を理解することで、意図しない変換を防ぎ、正確なデータ処理を実現できます。
構文(syntax)
1<?php 2// キーの大文字小文字を変更したい配列を用意します。 3$originalArray = [ 4 'FirstName' => 'John', 5 'lastName' => 'Doe', 6 'CITY' => 'New York' 7]; 8 9// 配列のすべてのキーを小文字に変換します。 10// CASE_LOWER はデフォルトなので省略も可能ですが、明示的に指定することで意図が明確になります。 11$arrayWithLowercaseKeys = array_change_key_case($originalArray, CASE_LOWER); 12// 例: $arrayWithLowercaseKeys は ['firstname' => 'John', 'lastname' => 'Doe', 'city' => 'New York'] となります。 13 14// 配列のすべてのキーを大文字に変換します。 15$arrayWithUppercaseKeys = array_change_key_case($originalArray, CASE_UPPER); 16// 例: $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 関数で配列キーを変換する
1<?php 2 3/** 4 * array_change_key_case 関数の使用例を示すスクリプト。 5 * 配列のキーを小文字または大文字に変換する方法を示します。 6 */ 7 8// 元となる連想配列を定義します。 9$originalArray = [ 10 'FirstName' => 'John', 11 'lastName' => 'Doe', 12 'Email_Address' => 'john.doe@example.com', 13 'AGE' => 30, 14]; 15 16echo "--- 元の配列 ---" . PHP_EOL; 17print_r($originalArray); 18 19// キーをすべて小文字に変換します (デフォルトの動作)。 20// array_change_key_case() の第2引数を省略すると、CASE_LOWER が適用されます。 21$lowerCaseKeysArray = array_change_key_case($originalArray); 22 23echo PHP_EOL . "--- キーを小文字に変換した配列 (CASE_LOWER) ---" . PHP_EOL; 24print_r($lowerCaseKeysArray); 25 26// キーをすべて大文字に変換します。 27// 第2引数に CASE_UPPER 定数を指定します。 28$upperCaseKeysArray = array_change_key_case($originalArray, CASE_UPPER); 29 30echo PHP_EOL . "--- キーを大文字に変換した配列 (CASE_UPPER) ---" . PHP_EOL; 31print_r($upperCaseKeysArray); 32 33?>
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で多次元配列のキーを再帰的に変換する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 配列のキーを再帰的に小文字または大文字に変換します。 7 * 8 * PHPの標準関数 `array_change_key_case()` は配列の第一階層のキーしか変換しません。 9 * この関数は、多次元配列のすべての階層にあるキーを対象に変換処理を行います。 10 * 11 * @param array $array 変換対象の多次元配列 12 * @param int $case 変換後のキーの形式。CASE_LOWER (デフォルト) または CASE_UPPER 13 * @return array キーが変換された新しい配列 14 */ 15function array_change_key_case_recursive(array $array, int $case = CASE_LOWER): array 16{ 17 // まず、現在の階層のキーを変換する 18 $result = array_change_key_case($array, $case); 19 20 // 配列の各要素をループで処理する 21 foreach ($result as $key => $value) { 22 // もし値が配列であれば、その配列に対してこの関数自身を再度呼び出す (再帰処理) 23 if (is_array($value)) { 24 $result[$key] = array_change_key_case_recursive($value, $case); 25 } 26 } 27 28 return $result; 29} 30 31// サンプルとなる多次元配列(キーが大文字・小文字混合) 32$user_data = [ 33 'USER_ID' => 101, 34 'Profile' => [ 35 'NAME' => 'Taro Yamada', 36 'Contact' => [ 37 'EMAIL' => 'taro.yamada@example.com', 38 'Phone' => '090-1234-5678' 39 ] 40 ], 41 'Status' => 'Active' 42]; 43 44// --- 実行例 --- 45 46// 1. 再帰的にすべてのキーを小文字に変換する (デフォルト) 47$lower_case_data = array_change_key_case_recursive($user_data); 48 49// 2. 再帰的にすべてのキーを大文字に変換する 50$upper_case_data = array_change_key_case_recursive($user_data, CASE_UPPER); 51 52 53// --- 結果の出力 --- 54 55echo "■ 元の配列:\n"; 56print_r($user_data); 57 58echo "\n■ すべてのキーを小文字に変換した配列 (再帰的):\n"; 59print_r($lower_case_data); 60 61echo "\n■ すべてのキーを大文字に変換した配列 (再帰的):\n"; 62print_r($upper_case_data); 63 64?>
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(大文字)といった定数で指定します。また、サンプルコードは厳格な型チェックを導入しているため、引数の型が正しく渡されているか確認することが重要です。