【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(大文字)といった定数で指定します。また、サンプルコードは厳格な型チェックを導入しているため、引数の型が正しく渡されているか確認することが重要です。

関連コンテンツ