取得した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関数を使うと思うのですが)
教えていただけますでしょうか?
よろしくお願いします。
1.Shopの数だけループする。
for($i=0;$i<count($xml->Shop);$i++){
print($xml->Shop[$i]->TEL).'<br/>' ;
}
2.意味がちょっとわからなかった。
echo $count = count($xml->Shop) ;
for($i = 0 ; $i < $count ; $i++ ) {
print($xml->Shop[$i]->TEL.'
') ;
}
配列の数を確認してみてください。
> 試してみましたが先頭の値しか出てきません。
どこかに転記ミスがあるのでは?
最初の回答者さんと同じ方法では意味が無いので別解を。
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);
などをセットすればいいと思います。
ありがとうございます。
試してみましたが先頭の値しか出てきません。
print($xml->Shop[99]->TEL);
とすると、100番目の別の値が出てくるのでデータはあるはずなんですが。