2012-03-07 67 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