2016-08-03 18 views
0

誰でも私に説明することができます、なぜkey()は正しくループしませんか?forArrayIteratorのkey()はforループでは機能しませんか?

​​

それは無限ループを返しますが、私は上forループの第二の表現を変更した場合: $iterator->key() < 2 それは最後の要素を表示しません。なぜ誰かが説明できますか?私は、2つの要素を表示するX上の配列のポインタを変更し、ディスプレイの3つの要素、Y上の配列にポインタを変更し、2つの要素を表示する必要が

...など

+2

問題は、キー2の最後の要素の後に、next()を使って次の要素に移動し、その後に要素がないことです。したがって、 'key()'で存在しない要素からキーを取得すると、NULLが返されます。 'key <3'の数値文脈では、NULLを意味するキーは整数に変換されます。したがってNULLは0になり、0は3より小さくなります。これは無限ループを引き起こします。 forループの条件部分に '$ iterator-> valid()'を使用して、常に有効な要素があることを確認してください。 – Rizier123

+0

@ Rizier123が言ったことにピギーバックする。このようなものです。if($ iterator-> valid()) { echo "{$ iterator-> key()} => {$ iterator-> current()}"、PHP_EOL; } else { die(0); //または何でも } ' – Andrew

答えて

0

あなただけforeach

を使用することができます
foreach ($iterator as $key => $value) { 
    // Do the things you gotta do here... 
} 

解決策を求めているわけではないと思いますが、その理由を知りたいだけです。他の人が説明したように、イテレータが最後の要素$iterator->key()に到達すると、null< 3であり、そのままになります。

関連する問題