对于每个密钥不是一个数字

时间:2012-11-05 20:19:41

标签: php xml pagination

所以我正在尝试迭代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/ )

5 个答案:

答案 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和关联数组,而是将所有值都推送到索引数组。