Как сказал Ипатьев, в php всё делается с помощью цикла foreach (да, здесь не только for и while), а чтобы получать курсор - у каждого списка или хешмапа (здесь для удобства массив это и то и другое, что закинешь внутрь тем и будет) - есть внутренний указатель который можно двигать функциями current()/prev()/next()/reset()/end().
Итераторы есть, но ими пользуются реже. В основном чтобы обходить директории рекурсивно, или многоуровневые хешмапы с путём, для стеков и рекурсий, и конечно для генераторов.
ArrayIterator() применяется почти никогда, если применяется то разве что для сведения нескольких "итерабельных" типов к единому способу обхода (чрезвычайно редкая задача), особенно когда в php появились интерфейсы \Traversable и проверка is_iterable(), позволяющая тупо передать что-угодно в foreach() чтобы его обойти.