Dans PHP, Array_Change_Key_Case () est une fonction très pratique qui convertit rapidement les noms de clés d'un tableau en minuscules ou en majuscules, et est souvent utilisé pour unifier les formats de données, en particulier lors du traitement des données externes (telles que les retours API). Cependant, cette fonction peut-elle être utilisée directement sur l'objet STDClass ? Cet article vous amènera à explorer ce problème ensemble.
array_change_key_case () prend un tableau et convertit tous ses noms de clés en minuscules ou en majuscules:
$data = [
"Name" => "Alice",
"AGE" => 25
];
$lowercase = array_change_key_case($data, CASE_LOWER);
print_r($lowercase);
Résultat de sortie:
Array
(
[name] => Alice
[age] => 25
)
Dans PHP, STDClass est le type d'objet anonyme le plus utilisé. Plusieurs fois, par exemple, lors du décodage d'une chaîne JSON via JSON_DECODE () , si le deuxième paramètre n'est pas passé , l'objet STDClass sera renvoyé par défaut.
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
print_r($obj);
Le résultat de sortie est similaire à:
stdClass Object
(
[Name] => Alice
[AGE] => 25
)
La réponse est: elle ne peut pas être utilisée directement . array_change_key_case () accepte uniquement les tableaux en tant que paramètres d'entrée. Si vous essayez de passer l'objet STDClass , vous obtiendrez un avertissement ou une erreur.
Exemple:
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
$result = array_change_key_case($obj, CASE_LOWER);
Sortir:
Warning: array_change_key_case() expects parameter 1 to be array, object given
Nous devons donc convertir l'objet en un tableau d'abord , puis utiliser la fonction.
Vous pouvez convertir StdClass en un tableau à l'aide de la conversion de type ou get_object_vars () :
$json = '{"Name": "Alice", "AGE": 25}';
$obj = json_decode($json);
// méthode 1:Conversion de type
$arr = (array) $obj;
// méthode 2:get_object_vars()
$arr2 = get_object_vars($obj);
// utiliser array_change_key_case
$lowercase = array_change_key_case($arr, CASE_LOWER);
print_r($lowercase);
Sortir:
Array
(
[name] => Alice
[age] => 25
)
Si vous devez convertir le résultat final en un objet , vous pouvez le faire:
$lower_obj = (object) $lowercase;
print_r($lower_obj);
résultat:
stdClass Object
(
[name] => Alice
[age] => 25
)
Supposons que vous obteniez des données utilisateur à partir d'une interface (par exemple https://api.m66.net/user/info ):
$response = file_get_contents('https://api.m66.net/user/info');
$data = json_decode($response); // La valeur par défaut est stdClass
$normalized = array_change_key_case((array) $data, CASE_LOWER);
print_r($normalized);
De cette façon, que les champs renvoyés par l'interface soient majuscules, en minuscules ou mixtes, vous pouvez les traiter uniformément dans le format dont vous avez besoin.
array_change_key_case () ne peut être utilisé que dans les tableaux;
STDClass doit être converti en premier en un tableau;
Il est recommandé d'appeler cette fonction après la conversion;
Après le traitement, vous pouvez également revenir à l'objet si nécessaire.
Cette astuce est très couramment utilisée lors du traitement des données JSON, en particulier lors de la connexion avec des interfaces externes, et peut vous aider à éviter de nombreux bogues causés par un boîtier de terrain incohérent.