W3docs

Функция end() для работы с массивами в PHP

Узнайте, как работает функция end() в PHP: синтаксис, использование с ассоциативными и пустыми массивами, внутренний указатель и частые ошибки.

В PHP массивы — один из наиболее часто используемых типов данных. Массивы позволяют хранить набор данных в одной переменной, которую затем можно легко изменять и перебирать. Одна из функций для работы с массивами — функция end().

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

Синтаксис

Синтаксис функции end() прост:

end(array &$array): mixed

Где $array — массив, последний элемент которого нужно вернуть. Стоит отметить два момента:

  • Массив передаётся по ссылке (&$array), поскольку end() изменяет внутренний указатель массива. Поэтому необходимо передавать реальную переменную, а не встроенное выражение вроде end([1, 2, 3]) — это вызовет уведомление в старых версиях PHP и фатальную ошибку в PHP 8.1+.
  • Тип возвращаемого значения — mixed: функция возвращает значение последнего элемента или false, если массив пуст.

Использование

Давайте подробнее рассмотрим, как функция end() работает на практике. Возьмём следующий массив:

Массив PHP

$fruits = array('apple', 'banana', 'cherry');

Чтобы получить последний элемент этого массива с помощью end(), используется следующий код:

php— editable, runs on the server

После выполнения этого кода переменная $last_fruit будет содержать строку 'cherry'.

Изменение указателя массива

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

Поскольку end() оставляет указатель на последнем элементе, вызов current() сразу после него вернёт то же последнее значение:

<?php

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

end($fruits);
echo current($fruits);

Этот код выведет следующее:

cherry

Если нужно перебрать массив в обратном порядке, не пытайтесь делать это повторными вызовами end() — указатель никогда не сдвигается дальше последнего элемента, и цикл, управляемый end(), никогда не завершится. Вместо этого используйте array_reverse() (или стандартный цикл for с обратным счётчиком от count($array) - 1):

<?php

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

foreach (array_reverse($fruits) as $fruit) {
    echo $fruit . "<br>";
}

Этот код выведет следующее:

cherry
banana
apple

Распространённые ловушки

При использовании функции end() следует помнить о нескольких распространённых ошибках:

Пустые массивы

Если массив, переданный в end(), пуст, функция возвращает false. Это неоднозначно: false может быть и настоящим значением непустого массива, поэтому простая проверка может дать неверный результат.

php— editable, runs on the server

Для надёжности сначала проверьте, не пуст ли массив (с помощью empty() или count()), либо используйте строгое сравнение !== false:

php— editable, runs on the server

Ассоциативные массивы

Функция end() всегда возвращает значение последнего элемента вне зависимости от того, является ли массив индексированным или ассоциативным:

php— editable, runs on the server

Если нужно получить последний ключ ассоциативного массива, используйте функцию array_key_last():

php— editable, runs on the server

end() и array_pop()

Частый источник путаницы — различие между end() и array_pop(). Обе функции дают доступ к последнему элементу, но:

  • end() читает последнее значение, не изменяя массив (она лишь перемещает внутренний указатель).
  • array_pop() удаляет последний элемент и возвращает его, уменьшая размер массива на единицу.

Используйте end(), когда нужно просто взглянуть на последнее значение; используйте array_pop(), когда необходимо фактически извлечь его из массива.

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

Функция end() входит в семейство функций PHP для работы с внутренним указателем. Остальные описаны в следующих разделах:

  • reset() — переместить указатель к первому элементу и вернуть его.
  • current() — прочитать элемент на текущей позиции указателя.
  • next() — продвинуть указатель и вернуть следующий элемент.
  • prev() — откатить указатель и вернуть предыдущий элемент.
  • array_reverse() — получить перевёрнутую копию массива для удобного перебора в обратном порядке.
  • array_pop() — удалить и вернуть последний элемент.

Заключение

В этой статье мы подробно рассмотрели функцию end() в PHP: её синтаксис, способы применения и распространённые ловушки. Несмотря на кажущуюся простоту, у этой функции есть важные нюансы, которые необходимо учитывать. Понимая принцип работы end(), вы сможете избежать типичных ошибок и использовать эту функцию с максимальной пользой в своём PHP-коде.

Диаграмма

Ниже приведена диаграмма, иллюстрирующая использование функции end():

graph TD
A[Array] --> B(end())
B --> C{Check result}
C --> |True| D(Return last element)
C --> |False| E(Handle empty array)

Практика

Практика
Какова цель функции end() в PHP?
Какова цель функции end() в PHP?
Was this page helpful?