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関数を使うと思うのですが)

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

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/09/18 14:10:05
  • 終了:2007/09/25 14:15:05

回答(3件)

id:Yota No.1

Yota回答回数453ベストアンサー獲得回数282007/09/18 14:50:30

ポイント27pt

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

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

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

}

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

id:kazuhiko11

ありがとうございます。

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

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

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

2007/09/18 15:54:13
id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/09/18 16:40:56

ポイント27pt

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

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

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

}

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

id:tezcello No.3

tezcello回答回数457ベストアンサー獲得回数682007/09/19 09:52:30

ポイント26pt

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

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


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

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);

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません