W3docs

reset()

Функция PHP reset() перематывает внутренний указатель массива на первый элемент и возвращает его значение. Узнайте, как и когда её использовать.

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

В этой статье объясняется, как работает внутренний указатель, что возвращает reset(), где чаще всего возникают ошибки и как она соотносится с другими функциями работы с указателем массива.

Что такое reset()?

reset() — встроенная функция PHP, которая перемещает внутренний указатель массива на первый элемент и возвращает его значение. Она является аналогом end(), которая перемещает указатель на последний элемент.

Важно: reset() изменяет указатель массива — именно поэтому её сигнатура принимает массив по ссылке (&$array). Вы передаёте переменную, а не литерал, и reset() изменяет состояние указателя этой переменной на месте.

Синтаксис

reset(array &$array): mixed

Параметры

ПараметрОписание
$arrayМассив, внутренний указатель которого нужно перемотать. Передаётся по ссылке, поэтому должна быть переменная (нельзя передать литерал массива напрямую).

Возвращаемое значение

reset() возвращает значение первого элемента массива или false, если массив пуст.

Тонкая ловушка: поскольку пустой массив возвращает false, нельзя надёжно отличить «пустой массив» от «первый элемент буквально равен false» только по возвращаемому значению. Если вам нужно такое разграничение, сначала проверьте массив с помощью empty() или count().

Примеры

Рассмотрим, как reset() ведёт себя с различными видами массивов.

Пример 1: Сброс указателя числового массива

Пример сброса указателя числового массива в PHP

php— editable, runs on the server

В этом примере у нас есть массив цветов. Мы вызываем функцию reset(), чтобы сбросить указатель на начало массива. Затем вызываем current(), чтобы получить первый элемент — 'red'.

Пример 2: Сброс указателя ассоциативного массива

Пример сброса указателя ассоциативного массива в PHP

php— editable, runs on the server

В этом примере у нас есть ассоциативный массив с данными о человеке. Мы вызываем функцию reset(), чтобы сбросить указатель на начало массива. Затем вызываем key() и current(), чтобы получить пару ключ-значение первого элемента.

Пример 3: Зачем нужен reset() после итерации

Это наиболее распространённый практический повод вызывать reset(). Функции, перемещающие указатель (next(), end(), ручной цикл while), оставляют его на месте. Без reset() следующее чтение продолжится с того места, где вы остановились:

<?php

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

// Advance the pointer to the end
end($colors);          // pointer now at 'blue'
echo current($colors); // outputs 'blue'

echo "\n";

// Rewind it
reset($colors);
echo current($colors); // outputs 'red'

reset() также возвращает первое значение, поэтому его можно получить напрямую: $first = reset($colors); вернёт 'red'.

reset() и foreach

Частая точка путаницы: цикл foreach не использует внутренний указатель массива. PHP итерирует по внутренней копии, так что указатель остаётся нетронутым, и вам не нужно вызывать reset() после foreach:

<?php

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

foreach ($colors as $color) {
    // ... do something
}

// Pointer was never moved by foreach
echo current($colors); // outputs 'red'

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

Типичные подводные камни

  • Передавайте переменную, а не литерал. Поскольку аргумент передаётся по ссылке, reset(['a', 'b']) вызовет ошибку в современных версиях PHP. Сначала присвойте массив переменной.
  • reset() изменяет состояние. Если другая часть вашего кода полагается на текущую позицию указателя, вызов reset() незаметно изменит её. При необходимости сохранить исходный указатель передайте копию.
  • false неоднозначно. Возврат false может означать «пустой массив» или «первое значение равно false». Используйте empty($array) там, где это важно.

Связанные функции

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

Заключение

reset() перематывает внутренний указатель массива на первый элемент и возвращает его значение. Используйте эту функцию всякий раз, когда предыдущая операция (next(), end() или ручной цикл с указателем) оставила указатель не в начале, а вам нужно начать чтение заново. Помните, что foreach не затрагивает указатель, аргумент должен быть переменной, а возврат false неоднозначен для пустых массивов.

Практика

Практика
Что делает функция reset() в PHP?
Что делает функция reset() в PHP?
Was this page helpful?