Почему перебор ArrayIterator заканчивается бесконечным циклом?

StackOverflow https://stackoverflow.com//questions/12709548

Вопрос

Массив в моем коде довольно большой, поэтому я вставляю его в Pastebin. http://pastebin.com/6tviT2Xj

Я не понимаю, почему у меня бесконечный цикл

Логика этого скрипта:

$it = new ArrayIterator($options);
while($it->valid()) {
    print $it->key();
    print $it->current();
}
Это было полезно?

Решение

Потому что вы никогда не переезжаете в вас итератор ( с Arrayiterator :: следующий () ).

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

Другие советы

Вы должны использовать $it->next(); еще, что вы будете полностью на одном клавише, вечно

вы перебираете текущий элемент, вам нужно сделать $it->next(); указать/перейти к следующему элементу

Основная проблема – не использовать $it->next(); в вашем, но многие из них все еще не дают желаемого результата, потому что если вы запустите print $it->current(); оно только вернется Array поскольку вы не можете выводить информацию о массиве с помощью print.

Вы должны использовать RecursiveArrayIterator и RecursiveIteratorIterator поскольку вы имеете дело с многомерным массивом

Чтобы получить все значения, попробуйте:

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

Посмотреть полную демонстрацию: http://codepad.viper-7.com/UqF18q

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top