1

所以我试图遍历一个 XML 提要并对其进行分页,但我遇到了一个问题。当我尝试获取当前数组的索引(键)时,它会在每次迭代时输出一个字符串“campDetails”,而不是像 0,1,2,3 这样的递增整数

这是 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

$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 回答
0

simplexml_load_file返回一个对象,foreach循环将遍历其字段,$i并将保存当前字段的键。

如果您还想要一个数字计数器,只需自行递增:

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

    // do your stuff
    $j++;

}
于 2012-11-05T20:26:23.250 回答
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

我没有使用当前的 foreach 和关联数组,而是将所有值推送到索引数组。

于 2012-12-09T00:16:29.410 回答