Kann mir jemand erklären, warum key()
funktioniert nicht in for
Schleife richtig?ArrayIterator-Schlüssel() funktioniert nicht in For-Schleife?
Beispiel
$iterator = new \ArrayIterator(range(1,3));
for ($iterator->seek(0); $iterator->key() < 3; $iterator->next()) {
echo "{$iterator->key()} => {$iterator->current()}", PHP_EOL;
}
Es Unendlich-Schleife zurück, aber wenn ich zweiten Ausdruck for
Schleife auf ändern: $iterator->key() < 2
zeigt es nicht letztes Element. Kann mir jemand erklären warum?
Ich brauche zwei Elemente angezeigt werden, auf X-Zeiger in Array ändern, dann 3 Elemente anzuzeigen, Zeiger in Array auf Y ändern, dann 2 Elemente anzuzeigen ... usw.
Das Problem ist, dass Sie nach dem letzten Element mit der Taste 2 zum nächsten Element mit 'next()' gehen und Sie danach nicht mehr haben. Wenn Sie also den Schlüssel von einem Element erhalten, das nicht mit 'key()' existiert, wird NULL zurückgegeben. Im numerischen Kontext mit 'key <3' wird der Schlüssel, NULL, in eine ganze Zahl umgewandelt. Also ist NULL 0 und 0 ist kleiner als 3. Das verursacht die Endlosschleife. Verwenden Sie '$ iterator-> valid()' in Ihrem Bedingungsteil der for-Schleife, um immer sicherzustellen, dass Sie ein gültiges Element haben. – Rizier123
Huckepack auf was @ Rizier123 sagte. So etwas wie 'if ($ iterator-> valid()) { echo "{$ iterator-> key()} => {$ iterator-> current()}", PHP_EOL; } sonst { sterben (0); // oder was auch immer } ' – Andrew