stdClass Object ( ["sample"] => stdClass Object ( ["color"] => red ) ["0"] => stdClass Object ( ["color"] => green ) )
json_decode をすると第2引数を指定しない限り上のようになることがあります。
sample の color を取り出すなら、「$foo->sample->color」で良いのですが、
[0] のほうを取り出そうとして「$foo->0->color」とやってもエラーになります。
かといって $foo->item(0) みたいなものがあるわけでもないようなので、
素直に Array にキャストするのが普通ですが、もし強引にそのまま扱いたいのであれば
$foo->{'0'}->color
のようにすればとりあえず取れます。
とは言え扱いにくいので json_decode($foo, true) として連想配列にしておいたほうがいいと思います。
2012/11/24 追記:
この方法はキーがString型の場合のみ使用できます。
Similar Posts:
- PHP で XML の内容を取得する(DOM, XPath)
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]マスク画像で写真を好きな形に切り抜く(クリッピングマスク)
- [PHP]背景の明るさを基準に見やすい文字色を組み合わせる(YUV輝度)
- [PHP]インスタンスが特定クラスのオブジェクトであるか調べる(型演算子)
- [PHP, JS]jQuery UI autocompleteを使った自動補完(候補予測)
- [PHP]円グラフを表示する(GD)
- [PHP]DOM, XPathを使ったスクレイピング(HTMLのタグ内容取得)
PHPのバージョンはどうなっていますでしょうか?
PHP5での挙動を確認したところ、プロパティ名がString型ではない場合に{‘property’}の形式が使えないようでした。
PHP4では正常に動作していました。
この仕様変更どうなんでしょうね・・・
コメントありがとうございます。
一応上記ソースでPHP 5.4.7および5.3.6での動作を確認できました。
json_encodeの特性上、数字以外のキー名を含む配列をエンコードした場合、すべてのキーがString型に変換されるため、エラーは発生しませんが、配列のすべてのキーが数字の場合int型として変換されるため、この方法は使えないことになります。
json_encodeを行う際、「json_encode($array, JSON_FORCE_OBJECT)」としておくことで回避する方法もあると思います。