2012-10-03 89 views
2

我的代碼中的數組非常大,所以我將它粘貼到pastebin中。 http://pastebin.com/6tviT2Xj爲什麼迭代ArrayIterator以無限循環結束?

我不明白爲什麼我得到無限循環

邏輯這個腳本是:

$it = new ArrayIterator($options); 
while($it->valid()) { 
    print $it->key(); 
    print $it->current(); 
} 
+3

不使用'forea ch'使用迭代器似乎很像PHP3 ...;) – Sven

+0

是的,但我必須知道下一個元素。 – drupality

+0

無論如何遺忘下一個():P – drupality

回答

6

因爲你從來沒有在你的迭代器(with ArrayIterator::next())移動。

while ($it->valid()) { 
    ... 
    $it->next(); 
} 
+0

只是Curios ..你測試這個代碼? ..你會知道它有錯誤,如果你做了 – Baba

+0

@Baba - 不,我只是添加了'$ it-> next()' - 因爲這是問題的原因。你的意思是什麼錯誤? –

+0

剛剛用適當的格式編輯你的代碼..你可以看到diffence – Baba

3

你應該使用$it->next();否則你會cicle在永恆

1

的主要問題是不是在你的,但使用$it->next();相同的密鑰仍然很多沒有給你想要的輸出,因爲如果你運行print $it->current();它會僅返回Array,因爲您無法使用print輸出陣列信息。

您應該使用RecursiveArrayIteratorRecursiveIteratorIterator,因爲你是在處理多維數組

要獲得所有值嘗試:

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($options)); 
foreach ($it as $key => $val) { 
    echo $key . ":" . $val . "\n"; 
} 

查看完整的演示:http://codepad.viper-7.com/UqF18q

+0

@Downvoter你能給解釋嗎? – Baba

2

你遍歷當前元素,你需要做$it->next();指向/去下一個元素