$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]);
我曾经想过在使用数据后删除/取消设置项目,但它似乎没有按照我预期的方式工作 - 是否有人知道为什么?为什么它没有显示它没有显示的东西?
谢谢, 莱恩
答案 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]);
}
// ...