現在の位置: ホーム> 最新記事一覧> array_change_key_case()を作成する方法アレイ内の指定されたキーのみを変換しますか?

array_change_key_case()を作成する方法アレイ内の指定されたキーのみを変換しますか?

M66 2025-04-24

PHPでは、 array_change_key_case()関数は、配列内のすべてのキー名を小文字または大文字に簡単に変換できます。しかし、アレイ全体のすべてのキーを変換したくない場合もありますが、それらを変換するだけです。現時点では、この目標を達成するために少しトリックが必要です。

この記事では、アレイ内の指定されたキーのarray_change_key_case()関数を「正確に」使用できる方法を紹介します。

質問の例

次の配列があるとします。

 $data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

名前の主要な名前を小文字に変換したいだけで、残りは同じままです。標準のarray_change_key_case($ data、case_lower)はすべてのキーを変更しますが、これは明らかに私たちのニーズを満たしていません。

解決策:指定されたキーを手動で操作します

配列を繰り返し、指定したリストに現在のキーがあるかどうかを判断します。もしそうなら、ケース変換を実行してから配列を再構築します。

 function change_selected_keys_case(array $array, array $keysToChange, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        if (in_array($key, $keysToChange)) {
            $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        } else {
            $newKey = $key;
        }
        $result[$newKey] = $value;
    }

    return $result;
}

使用例

$data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

$keysToChange = ['Name', 'Country'];

$modified = change_selected_keys_case($data, $keysToChange, CASE_LOWER);

print_r($modified);

出力結果:

 Array
(
    [name] => Alice
    [AGE] => 25
    [Gender] => Female
    [country] => Canada
)

ご覧のとおり、名前のみが小文字に変換され、他のキーは変更されていません。

追加の指示

ネストされたアレイを処理する必要がある場合、またはキー名の一致がケースに依存する必要がある場合は、 strtolower()を使用してキー名などを比較するなど、機能をさらに最適化できます。

また、関数をより一般的なバージョンに変換することもできます。たとえば、コールバック関数をサポートして、特定のキーを変換するかどうかを決定することもできます。

 function change_keys_with_callback(array $array, callable $shouldChange, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        $newKey = $shouldChange($key) ? 
            (($case === CASE_UPPER) ? strtoupper($key) : strtolower($key)) : 
            $key;

        $result[$newKey] = $value;
    }

    return $result;
}

使用例:

 $modified = change_keys_with_callback($data, function($key) {
    return in_array($key, ['Name', 'Country']);
});

要約します

PHPには、指定されたキーに対してのみarray_change_key_case()を使用するためのネイティブサポートはありませんが、単純なトラバーサルと判断のロジックを通じて同じ効果を達成できます。この方法は柔軟性があるだけでなく、実際の開発シナリオに非常に適した変換ロジックを制御することもできます。