人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

楽天トラベルAPIの最新Version2009-10-20で
PHPで以下のように連想配列で・・・と思ったら
Warning: Invalid argument supplied for foreach()
こんな警告が出てきて、調べたら配列じゃないよ!という意味だと分かりました。

自分では問題なく書いているつもりなんですけど、
これのどこが問題なんでしょうか?
分かる方がおられましたら、宜しくお願いします。

(上部省略)
$xml = simplexml_load_string($data);

foreach($xml->Body->simpleHotelSearch->hotel->hotelBasicInfo as $hotel){
$hotelName = $hotel->hotelName;
$hotelSpecial = $hotel->hotelSpecial;
$address1 = $hotel->address1;
$address2 = $hotel->address2;
$access = $hotel->access;
$hotelImageUrl = $hotel->hotelImageUrl;
$userReview = $hotel->userReview;

(以下省略)

●質問者: ぽこたん
●カテゴリ:コンピュータ インターネット
✍キーワード:009-1 access API AS BODY
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● hanako393
●50ポイント

$xml = simplexml_load_string($data);

の後に

var_dump($xml)

と書いて、実際取得したデータを見てください。

配列になってるかどうかもこれでわかります。

http://q.hatena.ne.jp/answer

◎質問者からの返答

PHP初心者なので、デバグ処理を忘れておりました。

これをやれば、データが入っているか分かるんでしたね。

あ・・・・データ取得で既に失敗していました。

省略した上部に間違いがあったようです、ありがとうございました★


2 ● koushic
●45ポイント ベストアンサー

Warning: Invalid argument supplied for foreach() と出てきても、foreach以下だけが問題ではない場合もありますので、本当は全文載せたほうが回答しやすいと思います。

Body->simpleHotelSearchではなく、

Body->SimpleHotelSearchSimpleHotelSearchではないでしょうか。

また楽天の場合、ほかのAPIと違って特殊で、xml中にSimpleHotelSearch:SimpleHotelSearchと出てくるので、str_replaceで:を置き換えする式が必要です。

そのあたりはされてますか?





http://q.hatena.ne.jp/answer

◎質問者からの返答

他のサイトなどを見て置き換えは行いましたが、別の場所が間違っていたようです。

省略した上の部分が間違えていたようなので、訂正してみます。

はてなが500文字制限で全部載せれませんでしたが、次からURL示して書きたいと思います。

回答頂きましてありがとうございました★


3 ● deflation
●10ポイント

SimpleXMLの記法が間違っています。

以下のように修正してみてください。

$xml = simplexml_load_string($data);
$simpleHotelSearch = $xml->Body->children($xmlns['simplehotelsearch']);
$hotel0 = $simpleHotelSearch->SimpleHotelSearch->children();
$hotels = $hotel0->hotel;

foreach($hotels as $hotel){
 $hotelName = $hotel->hotelName;
 $hotelSpecial = $hotel->hotelSpecial;
--省略--

参考「楽天トラベル施設検索API (version:2009-10-20)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ