Получить свойство объекта PHP, представляющее собой число - PullRequest
31 голосов
/ 07 марта 2012

Я пытаюсь получить свойство из данных JSON, декодированных в объект PHP. Это всего лишь запрос API данных YouTube, который возвращает видеообъект, который имеет такой контент, как;

[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
                )

Doing

$object->content->5

Выдает «неожиданный T_DNUMBER» - что имеет смысл. Но как мне получить значение свойства, представляющего собой число?

Я уверен, что должен это знать. Заранее спасибо.

Ответы [ 4 ]

68 голосов
/ 07 марта 2012

Это должно работать:

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

18 голосов
/ 07 марта 2012

Другая возможность - использовать второй параметр для json_decode:

$obj = json_decode(str, true);

Вы получаете массив вместо объекта PHP, который затем можете индексировать как обычно:

$obj['content'][5]
1 голос
/ 29 мая 2015

JSON кодирует, а затем декодирует ваш объект, передавая true в качестве второго параметра в функции декодирования. Это вернет ассоциативный массив.

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

Теперь вы можете использовать ваш новый массив

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

Использование $object->content->{'5'} будет не работать, если объект был создан путем приведения массива к объекту.

Более подробное описание можно найти здесь: https://stackoverflow.com/a/10333200/58795

0 голосов
/ 14 августа 2014

Еще один подход - приведение объекта к массиву.

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