W3docs

next()

Узнайте, как next() перемещает внутренний указатель массива, возвращает следующий элемент или false в конце, и как она сочетается с reset(), current() и prev().

Введение

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

Что делает функция next()

next() продвигает внутренний указатель массива на одну позицию вперёд и возвращает значение элемента, на котором он оказывается. Сигнатура выглядит так:

next(array &$array): mixed

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

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

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

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

<?php

$fruits = ['apple', 'banana', 'cherry'];

echo current($fruits) . "\n"; // pointer starts on the first element
echo next($fruits) . "\n";    // move forward, return the second
echo next($fruits) . "\n";    // move forward, return the third
var_dump(next($fruits));      // past the end -> false

Вывод:

apple
banana
cherry
bool(false)

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

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

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

<?php

$colors = ['red', 'green', 'blue'];

reset($colors);
echo current($colors) . "\n"; // first element

while (($color = next($colors)) !== false) {
    echo $color . "\n";
}

Вывод:

red
green
blue

Обратите внимание на !== false (строгое сравнение). Это важно — см. следующий раздел.

Проблема «ложных значений»

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

<?php

$data = ['a', 0, 'b'];
reset($data);

// WRONG: stops at the 0, never reaches 'b'
while ($value = next($data)) {
    echo $value . "\n";
}
echo "---\n";

Выводится только:

---

Цикл завершается немедленно, потому что next() возвращает 0 (второй элемент), что является ложным значением. Для массивов, которые могут содержать ложные значения, предпочтительнее использовать foreach, который полностью обходит внутренний указатель, или использовать key() для определения реального конца:

<?php

$data = ['a', 0, 'b'];
reset($data);

do {
    echo current($data) . "\n";
} while (next($data) !== null && key($data) !== null);

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

next() и связанные функции управления указателем

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

Комбинирование next() и prev() позволяет заглядывать вперёд и возвращаться назад в рамках одного прохода по массиву.

Заключение

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

Практика

Практика
Что делает функция PHP 'next()' согласно информации на этой странице?
Что делает функция PHP 'next()' согласно информации на этой странице?
Was this page helpful?