dポイントプレゼントキャンペーン実施中!

■現状
・APIリクエスト結果をPHPで受け取っているのですが、ネストがとても深いです
・個別に表示させようとしたら、4重foreachになりました

■質問
・ネストが深い多次元配列から、スマートにデータを取得するにはどうすれば良いでしょうか?
※同じようなことさえ出来れば、foreachでなくても構いません

A 回答 (3件)

>4重foreachになりました



何か問題がありますか?

添え字が既知ならforeachで回したりはしませんから「添え字がわからない」のですよね。他に方法がない以上は仕方ないです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>何か問題がありますか?
・4重foreachを見たことがなかったので、もっと良い方法があるのかと思い質問しましたー

お礼日時:2014/10/05 14:57

ちょっとエスパー回答になりますが 「添え字がわかっているけどスマートな取り出し方が分からない」 という質問であると仮定します。

簡単に言えば、foreachで回さなくても 「->」 (アロー演算子) を使えば子要素へのアクセスは可能だということです。

【返り値を json_decode($response, true) で処理している場合】
・すべての枝要素は数字添字配列または連想配列になります。 $v[0], $v['a'] のようにアクセスしてください。
・すべての葉要素の型情報は保持されたままPHPで扱えます。
・存在しないキーにアクセスした場合はNoticeが発生します。issetを使えば回避可能です。

【返り値を json_decode($response) で処理している場合】
・枝要素には数字添字配列配列とstdClassが混在します。$v[0], $v->a のようにアクセスしてください。
・すべての葉要素の型情報は保持されたままPHPで扱えます。
・存在しないキーにアクセスした場合はNoticeが発生します。issetを使えば回避可能です。

【返り値を SimpleXML で処理している場合】
・枝要素、葉要素ともすべてSimpleXMLElementオブジェクトになります。$v->a のようにアクセスしてください。
・属性には $v['a'] のようにアクセス出来ます。
・すべての葉要素を値として利用する際は、(String)を使って文字列にキャストしなければなりません。型情報は失われます。
・存在しないキーにアクセスした場合は空のSimpleXMLElement要素が返却されます。Noticeが発生するわけではないので注意してください。これもissetを使えば回避可能です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>「添え字がわかっているけどスマートな取り出し方が分からない」という質問であると仮定します
・今回の質問主旨ではないのですが、ここら辺も理解出来ていなかったので、参考になりましたー

お礼日時:2014/10/05 15:01

便宜的に「添え字」と書きましたが、オブジェクトのプロパティ名でも同じです(念のため)。

    • good
    • 0
この回答へのお礼

補足ありがとうございましたー

お礼日時:2014/10/05 14:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!