現在の位置: ホーム> 最新記事一覧> array_change_key_case()は、多次元配列のキー名のケース変換を処理できますか?

array_change_key_case()は、多次元配列のキー名のケース変換を処理できますか?

M66 2025-04-25

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
)

これにより、任意のディメンションの配列に完全なキーネームケース変換を実装できます。