In PHP ist Array_Change_key_case () eine sehr praktische Funktion, die die Schlüsselnamen eines Arrays schnell in alle Kleinbuchstaben oder Großbuchstaben umwandelt und häufig zur Vereinheitlichung von Datenformaten verwendet wird, insbesondere bei der Verarbeitung externer Daten (z. B. API -Rückgaben). Kann diese Funktion jedoch direkt auf dem STDClass -Objekt verwendet werden? In diesem Artikel werden Sie gemeinsam dieses Problem untersuchen.
Array_Change_key_case () nimmt ein Array und konvertiert alle Schlüsselnamen in Kleinbuchstaben oder Großbuchstaben:
$data = [
"Name" => "Alice",
"AGE" => 25
];
$lowercase = array_change_key_case($data, CASE_LOWER);
print_r($lowercase);
Ausgangsergebnis:
Array
(
[name] => Alice
[age] => 25
)
In PHP ist STDClass der am häufigsten verwendete anonyme Objekttyp. Wenn beispielsweise beispielsweise eine JSON -String über JSON_DECODE () dekodiert wird, wird das STDClass -Objekt standardmäßig zurückgegeben, wenn der zweite Parameter nicht übergeben wird.
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
print_r($obj);
Das Ausgangsergebnis ähnelt:
stdClass Object
(
[Name] => Alice
[AGE] => 25
)
Die Antwort lautet: Sie kann nicht direkt verwendet werden . array_change_key_case () akzeptiert Arrays nur als Eingabeparameter. Wenn Sie versuchen, das STD -Class -Objekt einzugeben, erhalten Sie eine Warnung oder einen Fehler.
Beispiel:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
$result = array_change_key_case($obj, CASE_LOWER);
Ausgabe:
Warning: array_change_key_case() expects parameter 1 to be array, object given
Daher müssen wir das Objekt zuerst in ein Array umwandeln und dann die Funktion verwenden.
Sie können die STDClass mit dem Typ Conversion oder Get_Object_vars () in ein Array konvertieren:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
// Verfahren 1:Typumwandlung Typ
$arr = (array) $obj;
// Verfahren 2:get_object_vars()
$arr2 = get_object_vars($obj);
// verwenden array_change_key_case
$lowercase = array_change_key_case($arr, CASE_LOWER);
print_r($lowercase);
Ausgabe:
Array
(
[name] => Alice
[age] => 25
)
Wenn Sie das Endergebnis in ein Objekt konvertieren müssen, können Sie dies tun:
$lower_obj = (object) $lowercase;
print_r($lower_obj);
Ergebnis:
stdClass Object
(
[name] => Alice
[age] => 25
)
Angenommen, Sie erhalten Benutzerdaten von einer Schnittstelle (z. B. https://api.m66.net/user/info ):
$response = file_get_contents('https://api.m66.net/user/info');
$data = json_decode($response); // Standard ist stdClass
$normalized = array_change_key_case((array) $data, CASE_LOWER);
print_r($normalized);
Unabhängig davon, ob die von der Schnittstelle zurückgegebenen Felder Großbuchstaben, Kleinbuchstaben oder gemischt sind, können Sie sie gleichmäßig in das Format verarbeiten, das Sie benötigen.
Array_Change_key_Case () kann nur in Arrays verwendet werden.
STDClass muss zuerst in ein Array umgewandelt werden.
Es wird empfohlen, diese Funktion nach der Konvertierung aufzurufen.
Nach der Verarbeitung können Sie bei Bedarf auch zum Objekt zurückkehren.
Dieser Trick wird bei der Verarbeitung von JSON -Daten sehr häufig verwendet, insbesondere bei der Verbindung mit externen Schnittstellen und kann Ihnen helfen, viele Fehler zu vermeiden, die durch inkonsistente Feldfall verursacht werden.