W3docs

next()

Узнайте, как PHP next() перемещает внутренний указатель массива, что она возвращает, ловушку с ложными значениями и как она работает с reset(), current() и prev().

Функция PHP next()

Каждый массив PHP имеет внутренний указатель, который отмечает один элемент как «текущий». Функция next() перемещает этот указатель вперёд на одну позицию и возвращает значение, на котором он останавливается. Она входит в небольшое семейство функций для работы с указателем — reset(), current(), prev() и end() — которые позволяют обходить массив шаг за шагом без написания собственного счётчика индексов. В этом руководстве подробно объясняется, что возвращает next(), как она изменяет указатель и какие граничные случаи могут застать вас врасплох.

Синтаксис и возвращаемое значение

next(array &$array): mixed

Из этой сигнатуры вытекают три важных момента:

  • Массив передаётся по ссылке (&$array). next() не возвращает новый массив — она изменяет внутренний указатель переданного массива.
  • Она возвращает значение следующего элемента, а не текущего. Чтобы прочитать элемент под указателем без его перемещения, используйте current().
  • В конце массива она возвращает false и оставляет указатель за последним элементом. Все последующие вызовы также возвращают false.

Когда скрипт впервые обращается к массиву, указатель стоит на первом элементе. Поэтому самый первый вызов next() уже возвращает второй элемент — распространённая причина ошибок «плюс-минус один».

Базовый пример next()

Фрагмент ниже читает первый элемент с помощью current(), затем дважды перемещается вперёд. Последний вызов выходит за конец массива и возвращает false:

php— editable, runs on the server

Вывод:

apple
banana
cherry
bool(false)

Обход массива с помощью next()

Распространённый паттерн — сначала вызвать reset() (чтобы убедиться, что указатель стоит в начале), вывести первый элемент, затем циклически вызывать next() до тех пор, пока она не вернёт false:

php— editable, runs on the server

Это выведет:

red
green
blue

Обратите внимание на строгое сравнение !== false — следующий раздел объясняет, почему нестрогая проверка опасна.

Ловушка с ложными значениями

next() возвращает false в конце массива, но также возвращает false, когда реальное значение элемента равно false, 0, "" или null. Нестрогое условие вида while (next($array)) поэтому остановится, как только встретит одно из таких значений:

php— editable, runs on the server

Поскольку next() возвращает 0 для второго элемента, тело цикла никогда не выполняется — вывод будет лишь:

done

Для массивов, которые могут содержать ложные значения, предпочтите foreach (он полностью игнорирует внутренний указатель) или проверяйте key(), который возвращает null только при достижении настоящего конца массива.

Как next() связана с другими функциями указателя

next() редко используется в одиночку. Она работает в паре с reset(), current(), prev(), end() и key(), предоставляя полный ручной контроль над курсором массива:

ФункцияПеремещает указатель?Возвращает
current()НетЭлемент под указателем
next()Вперёд на одинНовый текущий элемент (или false в конце)
prev()Назад на одинНовый текущий элемент (или false перед началом)
reset()К первомуПервый элемент
end()К последнемуПоследний элемент
key()НетКлюч текущего элемента (или null за концом)

Пример ниже использует end() и prev() вместе с next(), чтобы показать, как указатель может перемещаться в обоих направлениях за один проход:

php— editable, runs on the server

Вывод:

30
20
30
10

Когда использовать next()

Для обычного перебора всех элементов цикл foreach понятнее и безопаснее — он никогда не спотыкается о ложные значения. Прибегайте к next() только тогда, когда вам действительно нужен явный пошаговый контроль над положением указателя, например при заглядывании вперёд в середине цикла.

Заключение

Функция next() перемещает внутренний указатель массива на один шаг вперёд и возвращает значение, на котором он останавливается, возвращая false после прохождения последнего элемента. Поскольку она зависит от внутреннего указателя и сигнализирует о конце значением false, она работает в связке с reset(), current() и prev() — просто помните о ловушке с ложными значениями, когда нестрогое условие цикла останавливается слишком рано. Для обычной итерации предпочтите foreach; выбирайте next(), когда вам нужен точный контроль над курсором массива.

Практика

Практика
Что является правильным использованием функции 'next' в PHP?
Что является правильным использованием функции 'next' в PHP?
Was this page helpful?