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
Patricia Arquetteoriginal
2024-12-21 19:25:21966parcourir

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

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
  • 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
  • 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

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'];
  • 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'];
  • Utiliser JSON Fonctions :
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];

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!

Déclaration:
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