Start · Sprachen · PHP · Referenz · array_change_key_case

array_change_key_case

Funktion

Ändert alle String-Schlüssel eines Arrays in Groß- oder Kleinschreibung und gibt das modifizierte Array zurück.

seit PHP 4.2.0 Kategorie: array

Signatur

array_change_key_case(array $array, int $case = CASE_LOWER): array

Beschreibung

array_change_key_case() wandelt alle String-Schlüssel eines Arrays entweder in Kleinbuchstaben (CASE_LOWER) oder in Großbuchstaben (CASE_UPPER) um. Numerische Schlüssel werden dabei nicht verändert.

Die Funktion ist besonders nützlich, wenn Daten aus unterschiedlichen Quellen zusammengeführt werden, die uneinheitliche Groß-/Kleinschreibung verwenden – etwa HTTP-Header, CSV-Importe oder externe API-Antworten. Durch die Normalisierung der Schlüssel lassen sich anschließende Zugriffe zuverlässig und ohne Fallunterscheidung durchführen.

Wichtig: Wenn nach der Umwandlung zwei oder mehr Schlüssel identisch sind (z. B. 'Name' und 'name'), überschreibt der letzte Eintrag alle vorherigen. Das ursprüngliche Array bleibt unverändert – die Funktion gibt immer ein neues Array zurück.

Bei mehrdimensionalen Arrays werden nur die Schlüssel der obersten Ebene transformiert. Für tiefere Ebenen muss die Funktion rekursiv angewendet werden.

Parameter

Name Typ Default Beschreibung
$array Pflicht array Das Eingabe-Array, dessen Schlüssel umgewandelt werden sollen.
$case int CASE_LOWER Gibt die Ziel-Schreibweise an. Erlaubte Werte sind die Konstanten CASE_LOWER (Standard, Kleinbuchstaben) und CASE_UPPER (Großbuchstaben).

Rückgabewert

Typ
array
Beschreibung
Gibt ein neues Array zurück, das alle String-Schlüssel des Eingabe-Arrays in der gewählten Groß-/Kleinschreibung enthält. Numerische Schlüssel bleiben unverändert.

Beispiele

Schlüssel in Kleinbuchstaben umwandeln (Standard)

<?php
$data = [
    'Name'    => 'Alice',
    'EMAIL'   => 'alice@example.com',
    'AGE'     => 30,
    42        => 'numerischer Schlüssel',
];

$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
Array ( [name] => Alice [email] => alice@example.com [age] => 30 [42] => numerischer Schlüssel )

Schlüssel in Großbuchstaben umwandeln

<?php
$headers = [
    'content-type'   => 'application/json',
    'x-request-id'  => 'abc-123',
    'Authorization' => 'Bearer token',
];

$normalized = array_change_key_case($headers, CASE_UPPER);
print_r($normalized);
Array ( [CONTENT-TYPE] => application/json [X-REQUEST-ID] => abc-123 [AUTHORIZATION] => Bearer token )

Kollision durch doppelte Schlüssel nach Umwandlung

<?php
$data = [
    'id'   => 1,
    'ID'   => 2,
    'Id'   => 3,
];

// Nach CASE_LOWER sind alle Schlüssel 'id' — nur der letzte Wert bleibt erhalten
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
Array ( [id] => 3 )

Rekursive Anwendung auf mehrdimensionale Arrays

<?php
function array_change_key_case_recursive(array $arr, int $case = CASE_LOWER): array {
    return array_map(
        fn($value) => is_array($value) ? array_change_key_case_recursive($value, $case) : $value,
        array_change_key_case($arr, $case)
    );
}

$data = [
    'User' => [
        'Name'  => 'Bob',
        'EMAIL' => 'bob@example.com',
    ],
];

print_r(array_change_key_case_recursive($data));
Array ( [user] => Array ( [name] => Bob [email] => bob@example.com ) )

// Wichtig · Fallstricke

Schlüssel-Kollisionen: Wenn nach der Umwandlung mehrere Schlüssel denselben Namen erhalten, überschreiben spätere Einträge frühere stillschweigend. Es gibt keine Warnung oder Fehlermeldung – das Verhalten sollte daher bei unkontrollierten Eingabedaten bewusst berücksichtigt werden.

Mehrbyte-Zeichen: array_change_key_case() verwendet intern strtolower()/strtoupper() und ist daher auf ASCII beschränkt. Umlaute (ä, ö, ü) oder andere Nicht-ASCII-Zeichen in Schlüsseln werden nicht korrekt umgewandelt. Für solche Fälle sollte mb_strtolower() mit einer eigenen rekursiven Funktion eingesetzt werden.