Почему перебор ArrayIterator заканчивается бесконечным циклом?
-
13-12-2019 - |
Вопрос
Массив в моем коде довольно большой, поэтому я вставляю его в 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