Maison > développement back-end > tutoriel php > Comment accéder aux propriétés d'objet avec des noms invalides ou entiers en PHP ?

Comment accéder aux propriétés d'objet avec des noms invalides ou entiers en PHP ?

Patricia Arquette
Libérer: 2024-12-21 19:25:21
original
969 Les gens l'ont consulté

How to Access Object Properties with Invalid or Integer Names in PHP?

Comment puis-je accéder aux propriétés d'objet avec des noms comme des entiers ou des noms de propriété invalides ?

Le décodage JSON en PHP entraîne souvent la création d'objets avec des propriétés qui ont des noms invalides. Cette incohérence rend difficile l'accès à ces propriétés à l'aide de la syntaxe d'objet standard.

Accès aux propriétés avec des noms valides

Les propriétés avec des noms de variables valides sont accessibles à l'aide de la notation par points. :

$data = '{ "name": "John Doe" }';
$obj = json_decode($data);
echo $obj->name; // Output: John Doe
Copier après la connexion

Accès aux propriétés avec invalide Noms

L'accès aux propriétés avec des noms entiers ou d'autres noms non valides n'est pas aussi simple. PHP présente quelques bizarreries qui peuvent provoquer des erreurs :

  • PHP 7.2 et versions ultérieures permettent d'accéder aux propriétés numériques à l'aide de la syntaxe des accolades :
$data = '{ "42": "The Answer" }';
$obj = json_decode($data);
echo $obj->{'42'}; // Output: The Answer
Copier après la connexion
  • Cependant, pour noms de propriétés entièrement numériques, cette syntaxe reste échoue :
$data = '{ "123": "Three Digits" }';
$obj = json_decode($data);
echo $obj->{'123'}; // Error: syntax error
Copier après la connexion
  • Des exceptions à la règle ci-dessus se produisent lorsque l'objet n'est pas dérivé d'un tableau :
$obj = new stdClass;
$obj->{'123'} = 'Three Digits';
echo $obj->{'123'}; // Output: Three Digits
Copier après la connexion

Pratique Solutions

Pour accéder aux propriétés avec des noms non valides, tenez compte de ces éléments options :

  • Diffusion manuelle en tableau :
$obj = json_decode($data);
$arr = (array) $obj->highlighting;
$value = $arr['448364']['Data']['0'];
Copier après la connexion
  • Diffusion récursive de tableau :
function recursive_cast_to_array($obj) {
    $arr = (array) $obj;
    foreach ($arr as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }
    return $arr;
}

$arr = recursive_cast_to_array($obj);
$value = $arr['highlighting']['448364']['Data']['0'];
Copier après la connexion
  • Utiliser JSON Fonctions :
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];
Copier après la connexion

Notez que les fonctions JSON nécessitent un encodage UTF-8 pour toutes les chaînes.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal