2010-09-15 37 views
1
$xml = simplexml_load_file($xmlPath); 
$items = $xml->list->item; 
... 
echo $items[$currentIndex]->asXML(); 

当我在每次迭代打印出$ CURRENTINDEX,我得到0,1,2,3,4等 当我硬码$项[0] - > asXML(); $项目[1] - > asXML(); $项[2] - > asXML();等我得到我想要的数据。直接访问一个XML节点经由键

但是,当我环就像我在第一个代码段做什么,它打印出的物品0,2,4,等

这怎么可能,什么可能会造成这个?

感谢, 瑞安

ADDED信息:

这是它的主要部分:

$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; 
} 

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

感谢, 瑞安

ADDED信息2:

OK,我确定的代码导致该 “每隔一个” 综合症:)

unset($items[$currentIndex]); 

的思想路线当我使用这些数据时,我想删除/取消设置项目,但它似乎并没有按照我的预期工作 - 是否有人知道为什么?为什么没有设置它没有显示的东西?

感谢, 瑞安

+0

你能告诉我们设置'$ currentIndex'的循环代码吗?你需要确保$ currentIndex是一个数字而不是一个字符串? – LarsH 2010-09-15 19:47:50

回答

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]); 
} 
// ... 
+0

非常有意义。谢谢! – NightHawk 2010-09-15 21:14:15