現在の位置: ホーム> 最新記事一覧> array_change_key_case()は数値キーを処理できますか?

array_change_key_case()は数値キーを処理できますか?

M66 2025-05-12

PHPでは、特に外部ソース(フォーム、APIリターンなど)から取得した連想配列データを処理する場合、配列を処理するときにキーケース変換の必要性に遭遇することがよくあります。 array_change_key_case()は、配列キー名のケースを統合するために使用される関数です。ただし、しばしば見落とされているが非常に重要な問題は次のとおりです。

array_change_key_case()は、配列の「数値キー」のケースを変更しますか?

答えは次のとおりです。いいえ

公式文書の説明

公式のPHPドキュメントによると、 array_change_key_case()の役割は次のとおりです。

キーが大文字または小文字に変換される配列を返します。

ただし、これは文字列タイプキーにのみ適用され、数値キーの場合、関数は変更を加えません。

例の説明

以下は、その実際の動作を示す例です。

 <?php
$data = [
    "Name" => "Alice",
    "EMAIL" => "alice@example.com",
    100 => "シリアルナンバー",
    "AGE" => 30
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);
?>

出力結果:

 Array
(
    [name] => Alice
    [email] => alice@example.com
    [100] => シリアルナンバー
    [age] => 30
)

ご覧のとおり:

  • すべての文字列キー「名前」「電子メール」「年齢」など)は、小文字に正常に変換されます。

  • 数値キー100は変わらず、文字列にも変化するケースにもなりません。

なぜ番号キーが変更されないのですか?

これは、数字がPHPでは不要なためです。 PHPの配列のキーは、文字列または整数(積分)です。ケース変換は、本質的に文字列に対してのみ有効です。したがって、 array_change_key_case()は、キーが文字列である要素のみを処理します。

実用的なアプリケーションシナリオの例

APIリクエストを介して配列データのセットを返し、キー名を均一に処理する場合は、この機能を使用できます。しかし、その過程で、数値インデックスのキーが文字列に誤って変換されたり、変更されたりすることを心配する必要はありません。例えば:

 <?php
$json = '{
    "UserID": 101,
    "Username": "bob",
    "Scores": {
        "0": 90,
        "1": 85,
        "2": 88
    }
}';

$data = json_decode($json, true);
$data = array_change_key_case($data, CASE_LOWER);

// 出力 JSON フロントエンドの構造
echo json_encode($data);
?>

フロントエンドは、影響を受けることなく、 .scores [0]を使用してデータにアクセスできます。

アレイ内のネストされた構造をさらに処理する必要がある場合(すべてのレベルのキー名を小文字に再帰的に変換するなど)、再帰関数をカプセル化することができますが、それでも番号キーについて心配する必要はありません。

 function array_change_key_case_recursive($arr, $case = CASE_LOWER) {
    return array_map(function ($item) use ($case) {
        if (is_array($item)) {
            return array_change_key_case_recursive($item, $case);
        }
        return $item;
    }, array_change_key_case($arr, $case));
}

まとめ

  • array_change_key_case()は、文字列キーに対してのみ有効です。

  • ?配列内の数値キーは変更されません

  • ??数字キーはPHPの厳密に整数であり、上限と小文字の理論はありません。

  • ??ネストされたアレイを再帰的に処理する必要がある場合は、再帰関数を手動でカプセル化して、文字列キーを処理する必要があります。

このようにして、開発中の安心感を持つarray_change_key_case()を使用して、数字キーが誤って処理されていることを心配することができません。