所以我正在尝试迭代XML feed并对其进行分页,但我遇到了一个问题。当我尝试获取当前数组的索引(键)时,它会在每次迭代时输出一个字符串“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/ )
答案 0 :(得分:0)
在foreach
的这种用法中,$i
不是数字索引,而是键。在这种情况下,当前对象的键是campDetails
。
替代代码
$i = 0;
foreach($xml as $offer) {
// your code...
++$i;
}
有关您从simplexml_load
read the docs或使用print_r($xml);
进行调试的对象类型的详细信息。
答案 1 :(得分: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;
答案 2 :(得分:0)
simplexml_load_file
返回一个对象,foreach
循环将迭代其字段,$i
将保留当前字段的键。
如果你想要一个数字计数器,只需自己增加:
$j = 0;
foreach($xml as $i => $offer){
// do your stuff
$j++;
}
答案 3 :(得分: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";
答案 4 :(得分:0)
我没有使用当前的foreach和关联数组,而是将所有值都推送到索引数组。