In PHP begegnen Sie häufig auf die Notwendigkeit einer wichtigen Fallkonvertierung bei der Verarbeitung von Arrays, insbesondere wenn Sie mit assoziativen Array -Daten aus externen Quellen (z. B. Formularen, API -Rückgabe usw.) erhoben werden. Array_Change_key_Case () ist eine Funktion, mit der die Namen von Arrayschlüsselnamen vereint werden. Ein oft übersehenes, aber ziemlich kritisches Problem ist jedoch:
Ändern array_change_key_case () den Fall von "numerischen Schlüssel" im Array?
Nach der offiziellen PHP -Dokumentation beträgt die Rolle von Array_Change_key_Case () :
Gibt ein Array zurück, dessen Schlüssel in Großbuchstaben oder Kleinbuchstaben umgewandelt werden.
Dies gilt jedoch nur für String -Typ -Schlüssel, und für numerische Schlüssel enthält die Funktion keine Änderungen.
Hier ist ein Beispiel, um sein tatsächliches Verhalten zu demonstrieren:
<?php
$data = [
"Name" => "Alice",
"EMAIL" => "alice@example.com",
100 => "Seriennummer",
"AGE" => 30
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
?>
Ausgangsergebnis:
Array
(
[name] => Alice
[email] => alice@example.com
[100] => Seriennummer
[age] => 30
)
Sie können sehen:
Alle Stringschlüssel (z. B. "Name" , "E -Mail" , "Alter" ) werden erfolgreich in Kleinbuchstaben umgewandelt.
Der numerische Schlüssel 100 bleibt unverändert und wird weder zu einer String noch zu einem ändernden Fall.
Dies liegt daran, dass die Zahlen in PHP fehlerfrei sind. Die Schlüssel eines Arrays in PHP können Saiten oder Ganzzahlen (Integrale) sein. Und Fallumwandlung ist im Wesentlichen nur für Zeichenfolgen gültig. Daher verarbeitet Array_Change_key_case () nur Elemente, deren Schlüssel Zeichenfolgen sind.
Wenn Sie eine Reihe von Array -Daten über API -Anfragen zurückgeben und Schlüsselnamen einheitlich verarbeiten möchten, können Sie diese Funktion verwenden. Während des Prozesses müssen Sie sich jedoch keine Sorgen um die Schlüssel des numerischen Index machen, die fälschlicherweise in Saiten umgewandelt oder sich ändern. Zum Beispiel:
<?php
$json = '{
"UserID": 101,
"Username": "bob",
"Scores": {
"0": 90,
"1": 85,
"2": 88
}
}';
$data = json_decode($json, true);
$data = array_change_key_case($data, CASE_LOWER);
// Ausgabe JSON Struktur zum vorderen Ende
echo json_encode($data);
?>
Das Front-End kann weiterhin auf Daten zugreifen, ohne betroffen zu sein.
Wenn Sie verschachtelte Strukturen im Array weiter verarbeiten müssen (z. B. rekursive Schlüsselnamen auf allen Ebenen in Kleinbuchstaben rekursiv konvertieren), können Sie eine rekursive Funktion einkapseln, aber Sie müssen sich immer noch keine Sorgen um die Zahlenschlüssel machen:
function array_change_key_case_recursive($arr, $case = CASE_LOWER) {
return array_map(function ($item) use ($case) {
if (is_array($item)) {
return array_change_key_case_recursive($item, $case);
}
return $item;
}, array_change_key_case($arr, $case));
}
? Array_Change_key_Case () gilt nur für String -Tasten .
? Es wird die numerischen Schlüssel im Array nicht ändern.
? Die Zahlenschlüssel sind in PHP ausschließlich Ganzzahlen und es gibt keine obere und untere Falltheorie.
? Wenn Sie verschachtelte Arrays rekursiv verarbeiten müssen, müssen Sie die rekursive Funktion manuell einkapseln, um String -Tasten zu verarbeiten.
Auf diese Weise können Sie Array_Change_key_case () während der Entwicklung beruhigen, ohne sich Sorgen zu machen, dass die Zahlenschlüssel falsch verarbeitet werden!