2012-03-07 65 views
24

我试图从JSON数据解码到一个PHP对象中获取属性。这只是一个YouTube数据API请求,它返回一个内容对象喜欢的视频对象;获取一个数字的PHP对象属性

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

$object->content->5 

抛出 “意外T_DNUMBER” - 这是非常合情合理的。但是,我怎样才能得到一个数字的属性的价值?

我确定我应该知道这一点。提前致谢。

+3

PHP的更恼人的细微差别的绝对之一。 – 2012-03-07 17:52:59

+1

[如何使用整数名称访问对象属性?](http://stackoverflow.com/questions/10333016/how-to-access-object-properties-with-names-like-integers) – nawfal 2015-11-22 12:18:29

+0

[This解释它完美](https://stackoverflow.com/q/10333016/6521116) – 2017-06-06 13:43:17

回答

47

这应该工作:

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

+1

那did'er。谢谢! – 2012-03-07 17:54:17

+5

没有工作。捕获一个'未定义的属性:stdClass :: $ 5'。使用PHP版本5.5.7 – Geo 2014-04-04 21:59:08

+5

如果变量是已经转换为对象的数组,则此工作流程不起作用。详细的解释和例子可以在这里找到:http://stackoverflow.com/a/10333200/58795 – 2015-05-29 20:40:52

17

另一种可能性是使用第二个参数来json_decode:

$obj = json_decode(str, true); 

你得到的,而不是一个PHP对象数组,然后你可以索引像往常一样:

$obj['content'][5] 
+1

这将工作以及,谢谢。 – 2012-03-07 17:54:57

+0

更清洁恕我直言,感谢提示=) – Can 2015-12-16 07:43:32

2

另一个aproach是cas将对象映射到数组。

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

这是不正确的。您只将'$ object'对象转换为数组。 '$ content'属性仍然是一个对象。你还需要添加:'$ array ['content'] =(array)$ array ['content'];'。这就是为什么JSON编码/解码解决方案更简单。它也转换所有的子对象。 – 2015-05-29 20:59:23

+0

正确,只适用于一维数组 – 2016-06-17 14:02:23

1

JSON编码,然后解码您的对象传递true作为解码函数中的第二个参数。这将返回一个关联数组。

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

现在你可以使用你的新阵列

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

使用$object->content->{'5'}工作,如果对象是由铸造数组对象创建的。

更详细的描述可以在这里找到:https://stackoverflow.com/a/10333200/58795