W3docs

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
ParameterBeschreibung
$arrayDas Eingabe-array. Es wird nicht verändert — ein neues array wird zurückgegeben.
$caseEine 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

php— editable, runs on the server

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/html

Ausgabe:

text/html

Jetzt 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

Übung

Übung
Was macht die PHP-Funktion array_change_key_case?
Was macht die PHP-Funktion array_change_key_case?
Was this page helpful?