2012-03-07 9 views
24

PHPオブジェクトにデコードされたJSONデータからプロパティを取得しようとしています。これはコンテンツオブジェクトが好きな動画オブジェクトを返すYouTubeデータAPIリクエストです。完璧な理にかなって - 数値のPHPオブジェクトプロパティを取得する

$object->content->5 
を行う

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

は "予期せぬT_DNUMBER" をスローします。しかし、どのように私は数値であるプロパティの値を取得するのですか?

私はこれを知っているはずです。前もって感謝します。

+3

確かにPHPのより迷惑なニュアンスの一つ。 –

+1

[整数のような名前のオブジェクトプロパティにアクセスするにはどうすればいいですか?](http://stackoverflow.com/questions/10333016/how-to-access-object-properties-with-names-like-integers) – nawfal

+0

[Thisそれを完全に説明してください](https://stackoverflow.com/q/10333016/6521116) –

答えて

47

この動作するはず:、あなたが代わりにPHPオブジェクトの配列を取得

$obj = json_decode(str, true); 

そしてそのことができますインデックス:

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

+1

それはできませんでした。ありがとう! –

+5

動作しませんでした。 '未定義のプロパティ:stdClass :: $ 5'をキャッチしました。 PHPバージョン5.5.7の使用 – Geo

+5

変数がオブジェクトにキャストされた配列だった場合、このワークフローは機能しません。詳細な説明と例はここにあります:http://stackoverflow.com/a/10333200/58795 –

17

を別の可能性は、json_decodeする第二のパラメータを使用することです通常通り:

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

それはうまくいくでしょう、ありがとう。 –

+0

もっときれいなIMHO、ヒント=ありがとう) – Can

2

もう1つのaproachはcasですオブジェクトを配列に移します。

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

これは間違っています。あなたは '$ object'オブジェクトを配列にキャストしました。 '$ content'プロパティはまだオブジェクトです。これを追加する必要があります: '$ array ['content'] =(array)$ array ['content'];'。そのため、JSONのエンコード/デコードソリューションは簡単です。すべての子オブジェクトも変換します。 –

+0

True、単次元配列でのみ動作します –

1

JSONをエンコードしてから、デコード機能の2番目のパラメータとしてtrueを渡してオブジェクトをデコードします。連想配列が返されます。オブジェクトはオブジェクトに配列をキャストすることによって作成された場合

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

今すぐあなたの新しい配列$object->content->{'5'}を使用して

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

がしますない作業に使用することができます。

より詳細な説明はここで見つけることができます:https://stackoverflow.com/a/10333200/58795

関連する問題