Maison > développement back-end > tutoriel php > Comment puis-je accéder à des objets avec des noms de propriété invalides ou numériques en PHP à l'aide de `json_decode()` ?

Comment puis-je accéder à des objets avec des noms de propriété invalides ou numériques en PHP à l'aide de `json_decode()` ?

Mary-Kate Olsen
Libérer: 2024-12-18 08:16:15
original
859 Les gens l'ont consulté

How Can I Access Objects with Invalid or Numeric Property Names in PHP Using `json_decode()`?

Utiliser PHP pour accéder à des objets avec des noms de propriété invalides ou numériques

Lorsque vous essayez d'utiliser la fonction json_decode() en PHP pour analyser des données JSON , vous pourriez rencontrer des difficultés à accéder aux propriétés dont les noms sont des nombres entiers ou ne pas respecter les conventions de dénomination de variables valides. Ce comportement découle des limitations inhérentes à PHP dans la gestion des objets avec de telles propriétés.

Limitations et bizarreries

  1. Noms de propriétés numériques :
    Tenter d'accéder directement aux propriétés avec des noms numériques (sans aucun symbole $ précédent) entraînera une syntaxe erreur.
  2. Syntaxe des accolades :
    Les propriétés avec des noms non valides sont accessibles à l'aide de la syntaxe des accolades, mais uniquement pour les noms qui ne sont pas entièrement composés de chiffres.
  3. Origine de l'objet :
    Les objets créés directement à partir de tableaux peuvent toujours accéder aux propriétés numériques en utilisant la syntaxe des accolades, même s'ils sont techniquement invalides.

Solutions

Solution n°1 : Typecasting manuel

Castez manuellement le objet à un tableau pour accéder aux propriétés avec des noms non valides :

$a = array('123' => '123', '123foo' => '123foo');
$o = (object) $a;
$a = (array) $o;
echo $a['123']; // OK!
Copier après la connexion

Solution #2 : Option nucléaire

Employer une fonction récursive pour convertir des 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'];
Copier après la connexion

Solution n°3 : Fonctions JSON

Utilisez les fonctions JSON intégrées pour la conversion récursive en tableau :

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];
Copier après la connexion

C'est Il est important de considérer les inconvénients de chaque solution avant de choisir celle qui correspond le mieux à vos besoins. Par exemple, les solutions n°2 et n°3 effectuent des conversions de tableau inutiles, tandis que la solution n°3 nécessite en outre que les propriétés de chaîne soient codées en UTF-8.

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!

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