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

PHP初心者です。
取得したAPIを simplexml_load_file関数にて$xml
に代入しました。

格納したオブジェクトを print_r($xml) で表示した際

SimpleXMLElement Object
(
[NumberOfResults] => 4953
[DisplayPerPage] => 100
[DisplayFrom] => 1
[APIVersion] => 1.11
[Shop] => Array
(
[0] => SimpleXMLElement Object
(

[ShopName] =>居酒屋はてな
[ShopAddress] =>東京都港区
[TEL] =>03-1234-5679

)



[1] => SimpleXMLElement Object
(
[ShopName] =>ダイニングはてな
[ShopAddress] =>東京都千代田区
[TEL] =>03-9876-5432





)
)

この際、
1.[TEL]の値だけを出力する方法
2.[0],[1]-[n] n個の値を順に出力する方法
(たぶんwhile関数を使うと思うのですが)

教えていただけますでしょうか?

よろしくお願いします。

●質問者: kazuhiko11
●カテゴリ:ウェブ制作
✍キーワード:API object PHP XML はてな
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Yota
●27ポイント

1.Shopの数だけループする。

for($i=0;$i<count($xml->Shop);$i++){

print($xml->Shop[$i]->TEL).'<br/>' ;

}

2.意味がちょっとわからなかった。

◎質問者からの返答

ありがとうございます。

試してみましたが先頭の値しか出てきません。

print($xml->Shop[99]->TEL);

とすると、100番目の別の値が出てくるのでデータはあるはずなんですが。


2 ● Yota
●27ポイント

echo $count = count($xml->Shop) ;

for($i = 0 ; $i < $count ; $i++ ) {

print($xml->Shop[$i]->TEL.'
') ;

}

配列の数を確認してみてください。


3 ● tezcello
●26ポイント

> 試してみましたが先頭の値しか出てきません。

どこかに転記ミスがあるのでは?


最初の回答者さんと同じ方法では意味が無いので別解を。

1.は全てのTELタグの内容を

2.は先頭から指定した個数のTELタグの内容を

得るものだとします。

$string = <<<XML
<?xml version="1.0"?>
<ShopList>
<NumberOfResults>4953</NumberOfResults>
<DisplayPerPage>100</DisplayPerPage>
<DisplayFrom>1</DisplayFrom>
<APIVersion>1.11</APIVersion>

<Shop>
 <ShopName>居酒屋はてな</ShopName>
 <ShopAddress>東京都港区</ShopAddress>
 <TEL>03-1234-5679</TEL>
</Shop>
<Shop>
 <ShopName>ダイニングはてな</ShopName>
 <ShopAddress>東京都千代田区</ShopAddress>
 <TEL>03-9876-5432</TEL>
</Shop>
<Shop>
 <ShopName>リストランテはてな</ShopName>
 <ShopAddress>東京都品川区</ShopAddress>
 <TEL>03-5678-1234</TEL>
</Shop>
<Shop>
 <ShopName>炉ばたはてな</ShopName>
 <ShopAddress>東京都渋谷区</ShopAddress>
 <TEL>03-4321-8765</TEL>
</Shop>
</ShopList>

XML;

$xml = simplexml_load_string($string);
// ここまでは$xmlの値をセットしているだけなので実際には不要です。

// 全てのTELタグを取り出します
$tellist = $xml->xpath('//TEL');

// n個取り出す
$max = 3;

$i = 1;
foreach($tellist as $t){
 print $t;
 print "<br>\n";
 if ($i++ >= $max) break;
}

for文でもwhile文でもいいのですが、foreachで書いてみました。

上の例は、n=3個の値を出力する場合です。

全ての値を出力するには、foreach中のif文をコメントアウトするか

$max = $xml->NumberOfResults;

$max = $xml->DisplayPerPage;

$max = count($tellist);

などをセットすればいいと思います。

関連質問


●質問をもっと探す●



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