Aktueller Standort: Startseite> Neueste Artikel> Warum kann Array_Change_key_case () verschachtelte Arrays nicht umgehen?

Warum kann Array_Change_key_case () verschachtelte Arrays nicht umgehen?

M66 2025-04-25

In PHP ist Array_Change_key_case () eine praktische Funktion, die alle Schlüsselnamen in einem Array in Kleinbuchstaben oder Großbuchstaben umwandelt. Viele Menschen werden jedoch auf ein Problem stoßen, wenn diese Funktion zum ersten Mal verwendet wird: Warum ist das so? Wie funktioniert es? In diesem Artikel wird es anhand von Beispielen für Sie einzeln für Sie analysiert.

1. Grundnutzung dieser Funktion

Schauen wir uns zunächst die grundlegende Verwendung von Array_Change_key_Case () an:

 $data = [
    "Name" => "Alice",
    "Age" => 25,
    "Email" => "alice@m66.net"
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);

Ausgabe:

 Array
(
    [name] => Alice
    [age] => 25
    [email] => alice@vv99.net
)

Wie Sie sehen können, sind alle Schlüsselnamen zu Kleinbuchstaben geworden. Es sieht alles perfekt aus.

2. Wenn das Array eine verschachtelte Struktur hat ...

Fügen wir ein verschachteltes Array hinzu, um den Effekt zu sehen:

 $data = [
    "Name" => "Bob",
    "Info" => [
        "Email" => "bob@m66.net",
        "City" => "New York"
    ]
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);

Ausgangsergebnis:

 Array
(
    [name] => Bob
    [info] => Array
        (
            [Email] => bob@vv99.net
            [City] => New York
        )
)

Hast du es bemerkt? Der Schlüsselname der Info Subraun hat sich nicht geändert! Das liegt daran, dass:

Array_Change_key_Case () wirkt sich nur auf die Tastennamen der ersten Ebene des Arrays aus und verarbeitet keine rekursiven verschachtelten Arrays.

3. Wie die Funktion funktioniert

Aus der offiziellen Dokumentations- und Quellcode-Ebene können wir wissen, dass die Essenz von Array_Change_key_Case () darin besteht, das Array zu durchqueren und jeden Schlüsselnamen der obersten Ebene direkt zu manipulieren. Wenn ein Wert ein Array -Typ ist, wird er nicht eingereicht, um den Schlüsselnamen weiter rekursiv zu ändern.

Mit anderen Worten:

 foreach ($array as $key => $value) {
    $newKey = strtolower($key); // oder strtoupper($key)
    $newArray[$newKey] = $value;
}

Es ist so einfach und grob! Es gibt keine Rekursion, keine eingehende Struktur, sie ist sehr effizient, aber auch sehr "begrenzt".

4. Was soll ich tun, wenn ich das Nisten unterstützen möchte?

Wenn Sie die Schlüsselnamen verschachtelter Arrays gemeinsam konvertieren möchten, müssen Sie die rekursive Funktion selbst schreiben. Zum Beispiel:

 function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
    $newArray = [];
    foreach ($array as $key => $value) {
        $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        $newArray[$newKey] = is_array($value) ? change_keys_case_recursive($value, $case) : $value;
    }
    return $newArray;
}

$data = [
    "Name" => "Charlie",
    "Info" => [
        "Email" => "charlie@m66.net",
        "City" => "London"
    ]
];

$result = change_keys_case_recursive($data, CASE_LOWER);

print_r($result);

Ausgabe:

 Array
(
    [name] => Charlie
    [info] => Array
        (
            [email] => charlie@vv99.net
            [city] => London
        )
)

Alles scheint jetzt viel vernünftiger zu sein!

5. Zusammenfassung

  • array_change_key_case () ist nicht rekursiv und wirkt nur auf den Tasten auf der ersten Ebene des Arrays.

  • Wenn Sie Keynames in mehrdimensionale Arrays konvertieren müssen, müssen Sie eine benutzerdefinierte rekursive Funktion verwenden.

  • Dies ist auch ein häufiges Problem bei vielen integrierten Funktionen in PHP: Sie sind einfach und einfach zu bedienen, aber sie haben eine begrenzte Unterstützung für komplexe Strukturen.

Ich hoffe, dieser Artikel kann Ihnen helfen, dieses Problem gründlich zu verstehen und beim nächsten Schreiben von Code, wenn Sie Arrays verarbeiten, praktischer sein!