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()を使用して、数字キーが誤って処理されていることを心配することができません。