web-dev-qa-db-ja.com

数値であるPHPオブジェクトプロパティを取得する

PHPオブジェクトにデコードされたJSONデータからプロパティを取得しようとしています。コンテンツオブジェクトを持つビデオオブジェクトを返すのは、単なるYouTubeデータAPIリクエストです。

[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」をスローします-これは完全に理にかなっています。しかし、数値であるプロパティの値を取得するにはどうすればよいですか?

これは知っておくべきだと思います。前もって感謝します。

34
B. Notess

これはうまくいくはずです:

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

73
user1252065

別の可能性は、json_decodeに2番目のパラメーターを使用することです。

$obj = json_decode(str, true);

PHPオブジェクトではなく、配列を取得します。これは、通常どおりにインデックスを作成できます。

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

JSONエンコードし、デコード関数の2番目のパラメーターとしてtrueを渡してオブジェクトをデコードします。これは連想配列を返します。

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

これで、新しいアレイを使用できます

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

配列をオブジェクトにキャストすることによってオブジェクトが作成された場合、$object->content->{'5'}の使用は機能しません

より詳細な説明はここにあります: https://stackoverflow.com/a/10333200/58795

1
Mike McLin

別のアプローチは、オブジェクトを配列にキャストすることです。

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