web-dev-qa-db-fra.com

Obtenir un PHP propriété de l'objet qui est un nombre

J'essaie d'obtenir une propriété de données JSON décodée dans un objet PHP. Il s'agit simplement d'une demande d'API de données YouTube qui renvoie un objet vidéo contenant un objet de contenu.

[content] => stdClass Object
                (
                    [5] => https://www.youtube.com/v/r4ihwfQipfo?version=3&f=videos&app=youtube_gdata
                    [1] => rtsp://v4.cache7.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
                    [6] => rtsp://v6.cache3.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
                )

Faire

$object->content->5

Lance "T_DNUMBER inattendu" - ce qui est parfaitement logique. Mais comment puis-je obtenir la valeur d'une propriété qui est un nombre?

Je suis sûr que je devrais le savoir. Merci d'avance.

30
B. Notess

Cela devrait fonctionner:

$object->content->{'5'}

63
xato

Une autre possibilité consiste à utiliser le deuxième paramètre de json_decode:

$obj = json_decode(str, true);

Vous obtenez un tableau au lieu d'un objet PHP, que vous pouvez ensuite indexer comme d'habitude:

$obj['content'][5]
18
Tibo

Une autre approche consiste à convertir l'objet en tableau.

$array = (array) $object;
$array['content'][5];

JSON encodez, puis décodez votre objet en passant true en tant que second paramètre de la fonction de décodage. Cela retournera un tableau associatif.

$array = json_decode(json_encode($object), true);

Maintenant, vous pouvez utiliser votre nouveau tableau

echo $array['content']['5'];

Utiliser $object->content->{'5'} va not fonctionne si l’objet a été créé en transformant un tableau en objet.

Une description plus détaillée peut être trouvée ici: https://stackoverflow.com/a/10333200/58795

1
Mike McLin