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

【PHP8.x】array_change_key_case関数の使い方 | いっしー@Webエンジニア