current()
Функция current() в PHP возвращает значение элемента, на который указывает внутренний указатель array, не перемещая его.
Введение
Каждый PHP array имеет внутренний указатель — скрытый курсор, отмечающий один элемент как «текущий». Функция current() считывает значение в позиции этого курсора, не перемещая его. Таким образом, current() является читающей половиной инструментария PHP для ручного обхода array, дополняя навигационные функции next(), prev(), reset() и end().
В этой главе подробно объясняется, что такое внутренний указатель, как current() ведёт себя на границах array, и на какие подводные камни стоит обратить внимание перед использованием этой функции.
Что такое функция current() в PHP?
current() возвращает значение элемента, на который в данный момент указывает внутренний указатель array. Она не продвигает указатель, поэтому многократный её вызов будет возвращать одно и то же значение до тех пор, пока что-то другое не переместит курсор.
При создании нового array указатель устанавливается на первый элемент. Функции, которые его перемещают:
next()— переместить указатель на один элемент вперёд и вернуть его значение.prev()— переместить указатель на один элемент назад и вернуть его значение.reset()— перейти к первому элементу.end()— перейти к последнему элементу.
current() — единственная из этих функций, которая читает без перемещения указателя.
Синтаксис функции current()
current(array $array): mixedФункция принимает один аргумент — array для проверки — и возвращает значение в текущей позиции указателя либо false, если array пуст или указатель вышел за пределы последнего элемента.
Внимание: Поскольку
current()возвращаетfalseв конце array, нельзя использовать её для обнаружения конца array, который содержит значениеfalse. Используйтеkey(), которая возвращаетnullза пределами array, когда нужна надёжная проверка конца.
Базовый пример
Указатель находится на первом элементе, поэтому выводится apple. Вызовите current() ещё десять раз — результат по-прежнему будет apple, поскольку курсор никуда не сдвинулся.
Перемещение указателя с помощью next() и prev()
current() становится полезной в сочетании с навигационными функциями. Каждая из них перемещает курсор, а current() (или значение, которое возвращает сама функция) сообщает текущую позицию.
<?php
$fruits = ['apple', 'banana', 'cherry'];
echo current($fruits) . "\n"; // apple (pointer at index 0)
next($fruits);
echo current($fruits) . "\n"; // banana (pointer at index 1)
next($fruits);
echo current($fruits) . "\n"; // cherry (pointer at index 2)
prev($fruits);
echo current($fruits) . "\n"; // banana (pointer back at index 1)
reset($fruits);
echo current($fruits) . "\n"; // apple (pointer reset to start)Вывод:
apple
banana
cherry
banana
appleЧто происходит в конце array
Если сдвинуть указатель за последний элемент, current() вернёт false:
<?php
$fruits = ['apple', 'banana', 'cherry'];
end($fruits); // pointer on the last element
echo current($fruits) . "\n"; // cherry
next($fruits); // step beyond the last element
var_dump(current($fruits)); // bool(false)Вывод:
cherry
bool(false)Именно поэтому приведённое предупреждение важно: false от current() может означать «вышли за пределы» или «значение элемента действительно равно false».
current() и foreach
Распространённая неожиданность: foreach перебирает элементы array не используя и не перемещая его внутренний указатель. Поэтому current() не затрагивается циклом foreach и по-прежнему отражает ту позицию, которую в последний раз установили навигационные функции.
<?php
$fruits = ['apple', 'banana', 'cherry'];
foreach ($fruits as $fruit) {
// looping does not touch the internal pointer
}
echo current($fruits); // apple — still at the startВывод — apple, а не false. Если вам нужен ручной контроль над позицией, используйте next()/current(); если же просто нужно пройтись по всем элементам, используйте foreach.
Когда использовать current()
Используйте current(), когда вам нужен обход с сохранением состояния — то есть когда вы продвигаете курсор через несколько вызовов функций или итераций цикла и хотите заглянуть на активный элемент. Типичные случаи:
- Обработка array наподобие очереди с чередованием
next()иprev(). - Быстрое чтение первого элемента:
current($array)возвращает первое значение без необходимости знать его ключ. - Реализация пользовательского курсора по набору данных.
Для обычной итерации предпочтительнее foreach — он нагляднее и не подвержен неожиданностям с указателем.
Заключение
current() читает значение по внутреннему указателю array, не перемещая его, выступая читающей половиной набора ручного обхода PHP наряду с next(), prev(), reset() и end(). Помните о двух крайних случаях: функция возвращает одно и то же значение, пока что-то не сдвинет курсор, а за концом array возвращает false — поэтому для надёжного обнаружения конца используйте key().