3

私のコードの配列はかなり大きいので、pastebinに貼り付けます。http://pastebin.com/6tviT2Xj

なぜ無限のループが発生するのかわかりません

このスクリプトのロジックは次のとおりです。

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

4 に答える 4

7

イテレータ内を移動することはないため(ArrayIterator :: next()を使用)。

while ($it->valid()) {
    ...
    $it->next();
}
于 2012-10-03T13:31:57.737 に答える
3

$it->next();あなたは永遠に同じ鍵の上にサイクルする他の方法を使うべき です

于 2012-10-03T13:32:05.697 に答える
2

$it->next();現在の要素を繰り返し処理している場合は、次の要素をポイント/移動する必要があります

于 2012-10-03T13:33:46.780 に答える
1

主な問題はで使用$it->next();していませんが、それでも多くの場合、目的の出力が得られません。これを実行すると、で配列情報を出力できないため、print $it->current();返されるだけになるためです。Arrayprint

多次元配列を扱っているので、を使用する必要がRecursiveArrayIteratorありますRecursiveIteratorIterator

すべての値を取得するには、次のことを試してください。

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

完全なデモを見る:http://codepad.viper-7.com/UqF18q

于 2012-10-03T13:33:10.223 に答える