Всегда чтобы хранить какой то набор данных, я храню их в массиве (обычный array).
Однако, я знаю, что есть ArrayIterator, который также работает с тем же foreach.
Вопрос: когда мне стоит использовать ArrayIterator? это должны быть очень большие объемы данных, или по какой логике определять ? В чем самый основной дифф между array?
Тут главное не начинать все подряд массивы в итераторы загонять. Много где удобно работать в ОО стиле через итераторы, туда же можно при желании добавить генераторы. Есть куча стандартных (SPL) итераторов, есть кучи хэши и прочие прелести
Впервые начал работать через итераторы, когда начал работать с фс, списки файлов, параметры файлов, плюс есть рекурсивные
посмотри iterator_apply() + spl итераторы вроде CallbackFilterIterator/RecursiveArrayIterator + ты можешь наследовать любой подходящий итератор и снабдить его любым функционалом