array_change_key_case()
Die PHP-Funktion array_change_key_case() wandelt alle String-Schlüssel eines Arrays in Groß- oder Kleinbuchstaben um.
PHP array_change_key_case() Funktion
array_change_key_case() gibt eine Kopie eines Arrays zurück, bei der alle String-Schlüssel entweder in Kleinbuchstaben oder Großbuchstaben umgewandelt wurden. Die Funktion ist besonders nützlich, um Schlüssel aus unvorhersehbaren Quellen — HTTP-Header, CSV-Spaltentitel, Datenbankzeilen oder Benutzereingaben — zu normalisieren, damit der Rest des Codes sie über eine einheitliche, bekannte Schreibweise abrufen kann.
Diese Seite behandelt die Syntax, Parameter, den Rückgabewert, Besonderheiten bei numerischen Schlüsseln und Schlüsselkollisionen sowie einige praktische Beispiele.
Syntax
array_change_key_case(array $array, int $case = CASE_LOWER): array| Parameter | Beschreibung |
|---|---|
$array | Das Eingabe-array. Es wird nicht verändert — ein neues array wird zurückgegeben. |
$case | Eine der Konstanten CASE_LOWER (Standard) oder CASE_UPPER. |
Die Funktion gibt ein neues array mit den umgeschriebenen Schlüsseln zurück; das ursprüngliche array bleibt unverändert. Nur String-Schlüssel sind betroffen — Integer-Schlüssel werden unverändert zurückgegeben (siehe Numerische Schlüssel werden ignoriert unten).
Grundlegendes Beispiel: Schlüssel in Großbuchstaben umwandeln
Ausgabe:
Array
(
[FIRST_NAME] => John
[LAST_NAME] => Doe
)Die Schlüssel sind nun in Großbuchstaben, während die Werte (John, Doe) unverändert bleiben.
Standardverhalten: Kleinschreibung
Wenn das Argument $case weggelassen wird, ist der Standardwert CASE_LOWER, sodass Schlüssel kleingeschrieben werden. Dies ist die häufigste Anwendung — die Normalisierung von Eingaben mit gemischter Groß-/Kleinschreibung, bevor sie gelesen werden:
<?php
$headers = array("Content-Type" => "text/html", "X-Powered-By" => "PHP");
// No second argument → CASE_LOWER
$normalized = array_change_key_case($headers);
echo $normalized["content-type"]; // text/htmlAusgabe:
text/htmlJetzt kann $normalized["content-type"] immer gelesen werden, unabhängig davon, wie der Header ursprünglich geschrieben war.
Numerische Schlüssel werden ignoriert
array_change_key_case() betrifft nur String-Schlüssel. Integer-Schlüssel werden unverändert weitergegeben, sodass ein indiziertes array genauso zurückkommt, wie es übergeben wurde:
<?php
$mixed = array("Name" => "Ada", 0 => "zero", "Age" => 36);
print_r(array_change_key_case($mixed, CASE_UPPER));Ausgabe:
Array
(
[NAME] => Ada
[0] => zero
[AGE] => 36
)Achtung vor Schlüsselkollisionen
Da PHP-array-Schlüssel eindeutig sein müssen, kann das Umschreiben der Groß-/Kleinschreibung dazu führen, dass zwei unterschiedliche Schlüssel kollidieren. In diesem Fall gewinnt der spätere Wert und der frühere Eintrag wird stillschweigend verworfen:
<?php
$array = array("Name" => "Ada", "name" => "Grace");
print_r(array_change_key_case($array, CASE_LOWER));Ausgabe:
Array
(
[name] => Grace
)Sowohl "Name" als auch "name" werden zu "name", daher überlebt nur die letzte Zuweisung (Grace). Wenn jeder Eintrag erhalten bleiben soll, sollte vor dem Aufruf dieser Funktion auf Groß-/Kleinschreibungs-unempfindliche Duplikate geprüft werden.
Nur die oberste Ebene wird geändert
Diese Funktion ist nicht rekursiv — verschachtelte array-Schlüssel bleiben unverändert. Um Schlüssel tiefer in der Struktur zu ändern, muss das array selbst durchlaufen werden:
<?php
function changeKeyCaseRecursive(array $array, int $case = CASE_LOWER): array
{
$result = array_change_key_case($array, $case);
foreach ($result as $key => $value) {
if (is_array($value)) {
$result[$key] = changeKeyCaseRecursive($value, $case);
}
}
return $result;
}
$data = array("User" => array("First" => "Ada"));
print_r(changeKeyCaseRecursive($data, CASE_UPPER));Ausgabe:
Array
(
[USER] => Array
(
[FIRST] => Ada
)
)Häufige Anwendungsfälle
- HTTP-Header oder Query-Parameter normalisieren, damit Abfragen nicht von der Schreibweise des Absenders abhängen.
- CSV- oder Tabellenspaltenüberschriften bereinigen, bevor Zeilen dem eigenen Modell zugeordnet werden.
- Konfigurations- oder Datenbankschlüssel vereinheitlichen bei Code, der von verschiedenen Personen geschrieben wurde.
Verwandte Funktionen
strtolower()undstrtoupper()— ändern die Groß-/Kleinschreibung eines String-Wertes (diese Funktion verwendet sie auf Schlüsseln).array_keys()undarray_values()— extrahieren die Schlüssel oder Werte eines Arrays.array_flip()— tauscht Schlüssel und Werte.array_map()— transformiert array-Werte mit einem Callback.- Siehe PHP Arrays für einen umfassenderen Überblick.