为什么迭代使用无限循环结束的ArrayIterator?

时间:2012-10-03 13:28:52

标签: php infinite-loop arrayiterator

我的代码中的数组非常大,所以我将它粘贴在pastebin中。 http://pastebin.com/6tviT2Xj

我不明白为什么我会得到无限循环

此脚本的逻辑是:

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

4 个答案:

答案 0 :(得分:7)

因为你永远不会进入你的迭代器(with ArrayIterator::next())。

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

答案 1 :(得分:3)

你应该使用$it->next();否则你将永远地抄袭同一个键

答案 2 :(得分:2)

你正在迭代当前元素,你需要$it->next();指向/转到下一个元素

答案 3 :(得分: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