Maison >développement back-end >tutoriel php >Comment accéder aux propriétés d'objet avec des noms numériques ou invalides en PHP ?
Lorsque vous travaillez avec des données JSON en PHP, il est possible de rencontrer des objets avec des propriétés nommées comme des entiers ou non valides noms de variables. Cela peut entraîner des difficultés d'accès à ces propriétés en utilisant la notation par points standard.
Considérez l'exemple suivant, où un objet JSON est décodé à l'aide de json_decode() :
$myVar = json_decode($data);
Cela peut produire un objet comme :
[highlighting] => stdClass Object ( [448364] => stdClass Object ( [Data] => Array ( [0] => Tax amount liability is ....... ) ) )
Tentative d'accès à la valeur de la chaîne dans la clé [0] en utilisant la notation par points, comme indiqué ci-dessous, entraînera une erreur de syntaxe :
print $myVar->highlighting->448364->Data->0;
PHP ne peut pas accéder directement aux propriétés d'objet avec des noms numériques car elles sont considérés comme des noms de variables non valides. Ce problème survient en raison de la façon dont PHP analyse les accesseurs de propriété.
Option 1 : Casting manuel
Pour accéder à la propriété, vous pouvez convertissez manuellement l'objet en tableau en utilisant (array)$object. Cela vous permet d'accéder à la propriété numérique sous forme de clé de tableau :
$highlighting = (array)$myVar->highlighting; $data = (array)$highlighting['448364']->Data; $value = $data['0'];
Option 2 : Syntaxe des accolades
Une méthode alternative consiste à utiliser la syntaxe des accolades pour accéder à la propriété. Cependant, cela ne fonctionne que si le nom de la propriété n'est pas entièrement numérique :
echo $myVar->highlighting->{'448364'}->Data->0; // OK! echo $myVar->highlighting->{'123'}->Data->0; // Error!
Option 3 : Fonction de diffusion récursive
Une approche plus robuste consiste à créer un fichier personnalisé fonction qui convertit de manière récursive les objets en tableaux :
function recursive_cast_to_array($o) { $a = (array)$o; foreach ($a as &$value) { if (is_object($value)) { $value = recursive_cast_to_array($value); } } return $a; } $arr = recursive_cast_to_array($myVar); $value = $arr['highlighting']['448364']['Data']['0'];
Option 4 : Utiliser JSON Fonctions
Une autre option consiste à utiliser les fonctions JSON intégrées pour convertir récursivement l'objet en tableau :
$arr = json_decode(json_encode($myVar), true); $value = $arr['highlighting']['448364']['Data']['0'];
Cette approche est pratique mais nécessite que les données soient UTF -8 encodé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!