Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich mit dem durch Array_Change_key_Case () verursachten Schlüsselnamen überschreiben?

Wie kann ich mit dem durch Array_Change_key_Case () verursachten Schlüsselnamen überschreiben?

M66 2025-04-28

In PHP wird die Funktion array_change_key_case () verwendet, um die Schlüsselnamen eines Arrays in Kleinbuchstaben oder Großbuchstaben umzuwandeln. Dies ist nützlich, wenn Sie mit inkonsistenten Schlüsselnamen zu tun haben, insbesondere in Szenarien, in denen Daten aus externen Datenquellen wie APIs oder Formularen hergestellt werden.

Sie können jedoch auf ein gemeinsames Problem stoßen: Schlüsselnamen werden beim Konvertieren des Falls dupliziert, wodurch Daten überschrieben werden . Dies bringt das Risiko eines Datenverlusts mit sich, insbesondere wenn Sie sich mit Datenquellen mit unregelmäßigen Schlüsselnamen wie benutzerfreundlichen Parametern, Konfigurationsdateien oder JSON-Daten befassen.

1. Problem tritt wieder auf

Schauen wir uns ein einfaches Beispiel an:

 $data = [
    'UserID' => 123,
    'userid' => 456
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);

Ausgabe:

 Array
(
    [userid] => 456
)

Wie Sie sehen können, tritt nach der 'UserID' und 'userID' im ursprünglichen Array einheitlich in Kleinbuchstaben ein, und das Ergebnis ist, dass nur der letztere Wert beibehalten wird und der erstere überschrieben wird.

2. Lösung

Methode 1: Überprüfen Sie manuell den doppelten Schlüssel (empfohlen)

Eine Methode besteht darin, mögliche Konflikte zu erkennen, bevor der Fall von Schlüsselnamen vereint und die entsprechende Verarbeitung vorgenommen wird:

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

    foreach ($array as $key => $value) {
        $transformedKey = ($case === CASE_LOWER) ? strtolower($key) : strtoupper($key);

        if (isset($seen[$transformedKey])) {
            // Schlüsselname Konflikt,Verarbeitungsstrategien:über etwas springen / verschmelzen / Ausnahmen werfen usw.
            echo "Warning: Key '{$key}' conflicts with '{$seen[$transformedKey]}'.\n";
            continue;
        }

        $seen[$transformedKey] = $key;
        $result[$transformedKey] = $value;
    }

    return $result;
}

// prüfen
$data = [
    'UserID' => 123,
    'userid' => 456
];

$result = safe_change_key_case($data);

print_r($result);

Sie können sich für die Handhabungsstrategien entscheiden, wenn Konflikte auf der Grundlage bestimmter Geschäftsbedürfnisse wie Protokollierung, Abwerfen von Ausnahmen oder Verschmelzung von Daten entscheiden.

Methode 2: Halten Sie den ursprünglichen Schlüsselnamen (als Metadaten) beibehalten.

Wenn Sie keinen Schlüsselwert verlieren können, können Sie alle Informationen auf strukturiertere Weise speichern:

 $data = [
    'UserID' => 123,
    'userid' => 456
];

$transformed = [];

foreach ($data as $key => $value) {
    $lowerKey = strtolower($key);
    if (!isset($transformed[$lowerKey])) {
        $transformed[$lowerKey] = [];
    }
    $transformed[$lowerKey][$key] = $value;
}

print_r($transformed);

Ausgabe:

 Array
(
    [userid] => Array
        (
            [UserID] => 123
            [userid] => 456
        )
)

Auf diese Weise können Sie alle ursprünglichen Schlüsselwerte des Konflikts gleichzeitig beibehalten und sie in der späteren Verwendung flexibel behandeln.

Methode 3: Standardisieren Sie die Datenquelle

Die grundlegende Möglichkeit, Probleme zu vermeiden, besteht darin , die Schlüsselnamen vor dem Empfang von Daten zu normalisieren , wie z.

Wenn Sie beispielsweise die von der Schnittstelle zurückgegebene Datenstruktur steuern, können Sie die Parameter festlegen, um ein einheitliches Format auf dem Server oder Front-End zu erzwingen.

 $url = "https://m66.net/api/userinfo?userid=123";
// Gibt die Daten zur standardisierten Schlüsselnamen über die Schnittstelle zurück

3. Zusammenfassung

array_change_key_case () ist eine sehr praktische Funktion, aber Sie müssen vorsichtig mit dem Problem sein, dass bei der Verwendung von Schlüsselnamen Konflikte verursachen können . Sie können Datenverlust durch manuell verarbeitende Verarbeitung, strukturierte Speicherung oder kanonische Dateneingabe vermeiden.

Es wird empfohlen, in großen Projekten die Datenstruktur und den Namensschild zu vereinen, um ähnliche Probleme zu vermeiden und die Lesbarkeit und Stabilität des Codes zu verbessern.