1

そのため、XML フィードを反復処理してページ分割しようとしていますが、問題が発生しました。現在の配列のインデックス (キー) を取得しようとすると、0,1,2,3 のような増分整数ではなく、反復ごとに文字列 "campDetails" が出力されます。

XML 形式のサンプルを次に示します。

<campaigns>
<campDetails>
<campaign_id>2001</campaign_id>
<campaign_name>Video Chat Software</campaign_name>
<url>http://www.fakeurl.com</url>
</campDetails>
<?php
 $call_url = "https://www.fakeurl.com";
  if($xml = simplexml_load_file($call_url, "SimpleXMLElement", LIBXML_NOCDATA)):

           foreach($xml as $i => $offers):
                $offer_link     = $offers->url;
                $offer_raw_name = $offers->campaign_name;
              echo $i . " " . $offer_link; ?> </br> <?php echo $offer_raw_name;
           endforeach;
  endif;
  ?>

予想される出力:

0 http://www.fakeurl.com
Video Chat Software

実際の出力:

campDetails http://www.fakeurl.com
Video Chat Software

編集:皆さん、ご回答ありがとうございます。ここの別の質問から誤った情報が提供されたようです。$i は現在の繰り返しの数値インデックスを保持すると言われました。

print_r($xml); (明らかにもっと結果が出ていますが、これが最初です)

SimpleXMLElement Object ( [campDetails] => Array ( [0] => SimpleXMLElement Object ( [campaign_id] => 2001 [campaign_name] => Video Chat Software [url] => http://www.fakeurl.com/ )
4

5 に答える 5

0

この使用法ではforeach、は数値インデックスで$iはなくキーです。この場合、現在のオブジェクトのキーは です。campDetails

代替コード

$i = 0;
foreach($xml as $offer) {
    // your code...
    ++$i;
}

受け取るオブジェクトのタイプの詳細についてはsimplexml_load 、ドキュメントを読むか、 でデバッグしてprint_r($xml);ください。

于 2012-11-05T20:23:58.593 に答える
0

simplexml_load_fileオブジェクトを返し、foreachループがそのフィールドを反復処理し$i、現在のフィールドのキーを保持します。

数値カウンターも必要な場合は、自分でインクリメントしてください。

$j = 0;
foreach($xml as $i => $offer){

    // do your stuff
    $j++;

}
于 2012-11-05T20:26:23.250 に答える
0

現在の foreach と連想配列を使用する代わりに、すべての値をインデックス付き配列にプッシュしました。

于 2012-12-09T00:16:29.410 に答える
0

少し冗長ですが、次のようなものを使用できます。

$x = 0;
foreach($xml as $i => $offers):
    // other stuff
    echo $x . " " . $offer_link; ?> </br> <?php echo $offer_raw_name;
    $x++;
endforeach;

次のようにエコー行を合理化することもできます。

echo "$i $offer_link <br> $offer_raw_name";
于 2012-11-05T20:26:37.310 に答える
0

あなた$iはインデックスではありません。次のようなことができます。

$index = 0;
foreach($xml as $i => $offers):
    $offer_link     = $offers->url;
    $offer_raw_name = $offers->campaign_name;
    echo $index++ . " " . $offer_link; ?> </br> <?php echo $offer_raw_name;
endforeach;
于 2012-11-05T20:24:52.350 に答える