Next: примеры (PHP)

Руководство по использованию next для работы с массивами
Раздел: Работа с массивами
next(array|object &$array): mixed

Описание функции next

Функция next() в PHP используется для перемещения внутреннего указателя массива на одну позицию вперед. После перемещения, она возвращает значение элемента, находящегося в новой позиции указателя.

Когда применяется функция

Использование функции актуально при ручном переборе элементов массива без применения циклов. Она часто задействуется в комбинации с current(), prev() и reset().

Аргументы функции

Функция принимает один обязательный параметр:

  • array &$array – массив, внутренний указатель которого необходимо переместить. Параметр передается по ссылке.

Возвращаемые значения: значение элемента массива в новой позиции указателя, false при достижении конца массива или если массив пуст.

Простые примеры использования
Базовое перемещение по массиву
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
echo current($fruits); // яблоко
echo next($fruits);    // банан
?>
яблоко
банан
Достижение конца массива
<?php
$array = ['первый', 'последний'];
next($array); // 'последний'
var_dump(next($array));
?>
bool(false)
Работа с ассоциативным массивом
<?php
$user = ['имя' => 'Анна', 'возраст' => 30, 'город' => 'Москва'];
reset($user);
echo current($user); // Анна
echo next($user);    // 30
echo next($user);    // Москва
?>
Анна
30
Москва
Аналогичные функции в PHP
  • prev() – перемещает внутренний указатель массива на одну позицию назад. Применяется для обратного перебора.
  • current() – возвращает текущий элемент массива, не двигая указатель.
  • reset() – устанавливает указатель на первый элемент. Используется для начала перебора.
  • end() – перемещает указатель на последний элемент массива.
  • each() – возвращает пару ключ/значение текущего элемента и двигает указатель вперед. Устарела с PHP 7.2.

Для большинства задач перебора удобнее использовать циклы foreach или итераторы.

Частые ошибки
Использование с не-массивами
<?php
$var = 'строка';
var_dump(next($var));
?>
Warning: next() expects parameter 1 to be array, string given
Попытка изменить указатель у пустого массива
<?php
$emptyArray = [];
var_dump(next($emptyArray));
?>
bool(false)
Игнорирование возвращаемого false
<?php
$array = ['один'];
next($array); // false, массив закончился
if (next($array) === false) {
    echo 'Достигнут конец массива';
}
?>
Достигнут конец массива
Изменения в версиях PHP

В PHP 8.0 поведение функции next() при передаче не-массива было изменено. Раньше она возвращала null и вызывала ошибку уровня E_WARNING. Теперь функция выбрасывает исключение TypeError.

<?php
// PHP 7.x
$var = null;
var_dump(@next($var)); // NULL, Warning
// PHP 8.x
// Выбрасывается TypeError
?>
Расширенные примеры
Комбинирование с reset и prev
Пример php
<?php
$data = [10, 20, 30];
reset($data);
echo current($data); // 10
echo next($data);    // 20
echo prev($data);    // 10
echo end($data);     // 30
echo prev($data);    // 20
?>
10
20
10
30
20
Использование в цикле while
Пример php
<?php
$colors = ['красный', 'зеленый', 'синий'];
reset($colors);
while ($value = current($colors)) {
    echo $value . ' ';
    next($colors);
}
?>
красный зеленый синий
Обработка массива с false-элементами
Пример php
<?php
$special = [true, false, 'текст'];
reset($special);
while (key($special) !== null) { // проверка по ключу
    var_dump(current($special));
    next($special);
}
?>
bool(true)
bool(false)
string(10) "текст"
Работа с внутренним указателем после array_map
Пример php
<?php
$nums = [1, 2, 3];
$doubled = array_map(fn($n) => $n * 2, $nums);
reset($doubled);
echo current($doubled); // 2
echo next($doubled);    // 4
?>
2
4
Аналоги в других языках

Next в Python

Функция next() работает с итераторами. Требуется передать итератор вручную.

fruits = ['яблоко', 'банан', 'апельсин']
iterator = iter(fruits)
print(next(iterator))  # яблоко
print(next(iterator))  # банан
яблоко
банан

Next в Javascript

В JavaScript массивы являются итерируемыми объектами. Можно использовать метод .next() итератора.

const fruits = ['яблоко', 'банан', 'апельсин'];
const iterator = fruits[Symbol.iterator]();
console.log(iterator.next().value); // яблоко
console.log(iterator.next().value); // банан
яблоко
банан

Next в MySQL

Прямого аналога нет. Для последовательного доступа к результатам запроса используются курсоры.

PHP next function comments

En
Next Advance the internal pointer of an array