通过密钥直接访问XML节点

时间:2010-09-15 18:58:05

标签: php xml key simplexml

$xml = simplexml_load_file($xmlPath);
$items = $xml->list->item;
...
echo $items[$currentIndex]->asXML();

当我在每次迭代时打印$ currentIndex时,我得到0,1,2,3,4等。 当我硬编码$ items [0] - > asXML(); $项目[1] - > asXML(); $项[2] - > asXML();我得到了我想要的数据。

但是当我像第一个代码段中那样循环时,它会输出0,2,4等项目。

这怎么可能,导致这种情况的原因是什么?

谢谢, 莱恩

添加信息:

这是它的主要部分:

$totalItems = 45;
$keepItems = 10;
$currentIndex = 0;

while($totalItems > $keepItems)
{
    $totalItems -= 1;
    print_r($xml->list->item[$currentIndex]);
    $currentIndex += 1;
}

我只是在一个单独的文件中尝试了这个,它在那个实例中起作用:

$xml = simplexml_load_file($xmlPath);
$items = $xml->list->item;

$counter = 45;
$display = 0;

while($counter > 4)
{
    echo $items[$display]->asXML();

    $display += 1;
    $counter -= 1;
}

因此,我的其他代码中的某些内容正在实现这一点。我将不得不再看一下,但肯定没有什么明显的。

谢谢, 莱恩

添加信息2:

好的,我确定了导致这种“每隔一个”综合症的代码行:)

unset($items[$currentIndex]);

我曾经想过在使用数据后删除/取消设置项目,但它似乎没有按照我预期的方式工作 - 是否有人知道为什么?为什么它没有显示它没有显示的东西?

谢谢, 莱恩

1 个答案:

答案 0 :(得分:1)

Why is it unsetting something it hasn't displayed?这不是你的情况。当您取消设置已处理的项目时,数组数据将移位...索引1处的前一个元素获取索引0,2移动到1,依此类推。因此,如果在取消设置$ element [0]后访问$ element [1],您将获得位于$ element [2]的元素,因为前$元素[1]移动到$ element [0]并且$ element [2]到$ element [1]。

如果你总是取消设置处理过的元素,你可以通过在每次迭代时访问$ element [0]来取消,如果数组为空则取消。


// ...
while ($array) {               // same as count($array)
  $currentElement = $array[0];
  // do something
  unset($array[0]);
}
// ...