Aktueller Standort: Startseite> Neueste Artikel> Wie kann man Array_Change_key_Case () nur einen Teil der Tasten beeinflussen?

Wie kann man Array_Change_key_Case () nur einen Teil der Tasten beeinflussen?

M66 2025-04-24

In PHP kann die Funktion array_change_key_case () alle Schlüsselnamen einfach in ein Array in Kleinbuchstaben oder Großbuchstaben umwandeln. Aber manchmal wollen wir nicht alle Schlüssel des gesamten Arrays konvertieren, sondern sie einfach konvertieren. Zu diesem Zeitpunkt ist ein kleiner Trick erforderlich, um dieses Ziel zu erreichen.

In diesem Artikel wird eine Methode eingeführt, mit der Sie die Funktion array_change_key_case () für angegebene Schlüssel in einem Array "präzise" verwenden können.

Frage Beispiel

Angenommen, wir haben das folgende Array:

 $data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

Wir möchten nur die Schlüsselnamen von Namen und Land in Kleinbuchstaben konvertieren, und der Rest bleibt gleich. Der Standard -Array_Change_key_case ($ data, case_lower) ändert alle Schlüssel, was offensichtlich nicht unseren Anforderungen entspricht.

Lösung: Verwenden Sie den angegebenen Schlüssel manuell

Wir können über das Array iterieren, feststellen, ob sich der aktuelle Schlüssel in der von uns angegebenen Liste befindet, und wenn ja, wird es die Fallkonvertierung durchführen und dann das Array wieder aufbauen.

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

    foreach ($array as $key => $value) {
        if (in_array($key, $keysToChange)) {
            $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        } else {
            $newKey = $key;
        }
        $result[$newKey] = $value;
    }

    return $result;
}

Nutzungsbeispiel

 $data = [
    'Name' => 'Alice',
    'AGE' => 25,
    'Gender' => 'Female',
    'Country' => 'Canada'
];

$keysToChange = ['Name', 'Country'];

$modified = change_selected_keys_case($data, $keysToChange, CASE_LOWER);

print_r($modified);

Ausgangsergebnis:

 Array
(
    [name] => Alice
    [AGE] => 25
    [Gender] => Female
    [country] => Canada
)

Wie Sie sehen können, werden nur Name und Land in Kleinbuchstaben umgewandelt, und die anderen Schlüssel haben sich nicht geändert.

Zusätzliche Anweisungen

Wenn Sie sich mit verschachtelten Arrays befassen müssen oder wenn die Anpassung von Schlüsselnamen von Fall unempfindlich sein muss, können Sie die Funktion weiter optimieren, z. B. die Verwendung von Strtolower (), um Schlüsselnamen zu vergleichen usw.

Sie können die Funktion auch in eine allgemeinere Version verwandeln, z. B. die Unterstützung von Rückruffunktionen, um zu entscheiden, ob ein bestimmter Schlüssel konvertiert werden soll:

 function change_keys_with_callback(array $array, callable $shouldChange, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        $newKey = $shouldChange($key) ? 
            (($case === CASE_UPPER) ? strtoupper($key) : strtolower($key)) : 
            $key;

        $result[$newKey] = $value;
    }

    return $result;
}

Verwendungsbeispiel:

 $modified = change_keys_with_callback($data, function($key) {
    return in_array($key, ['Name', 'Country']);
});

Zusammenfassen

Obwohl PHP keine native Unterstützung für die Verwendung von Array_Change_key_case () nur für angegebene Schlüssel hat, können wir den gleichen Effekt durch einfache Durchlauf- und Beurteilungslogik erzielen. Diese Methode ist nicht nur flexibel, sondern ermöglicht es Ihnen auch, die Konvertierungslogik zu steuern, die für die tatsächlichen Entwicklungsszenarien sehr geeignet ist.