ZaLinux.ru

Как получить последний элемент массива в PHP

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

Вариант 1

Начиная с PHP 7.3 наконец-то добавлена специальная функция, которая получает последний ключ массива, это функция array_key_last.

Обратите внимание, что извлекается не последний элемент массива, а именно последний ключ, поэтому для получения самого последнего члена массива эту функцию нужно использовать следующим образом:

$x = $array[array_key_last($array)];

Бенчмарки производительности показывают, что это самый быстрый вариант, поэтому рекомендуется использовать именно его.

Поскольку PHP 7.3 на момент написания является совсем недавним стабильным релизом, то эта версия доступна ещё не на всех серверах. Для достижения совместимости, рекомендуется использовать следующий код:

if (! function_exists("array_key_last")) {
    function array_key_last($array) {
        if (!is_array($array) || empty($array)) {
            return NULL;
        }
        
        return array_keys($array)[count($array)-1];
    }
}

Этот код проверяет, доступна ли функция array_key_last. Если эта функция недоступна, то создаётся пользовательская функция с таким же именем, которая выполняет это же самое действие. Результатом этого будет то, что на PHP версии 7.3 и более поздних будет использоваться оригинальная функция array_key_last, а на более старых версиях будет задействована пользовательская функция array_key_last.

Рассмотрим ещё варианты, которые подойдут для более старых версий PHP.

Некоторые из рассмотренных вариантов могут показаться излишне усложнёнными, но это сделано для того, чтобы убрать воздействие на массив. К примеру, нужное действие (получение последнего элемента массива) может выполнять функция array_pop, но она не используется сама по себе (хотя применяется в некоторых рассмотренных конструкциях), поскольку в результате её действия удаляется извлекаемый элемент.

Вариант 2

$x = array_values(array_slice($array, -1))[0];

Вариант 3

$x = array_slice($array, -1)[0];

Вариант 4

$x = array_pop((array_slice($array, -1)));

Вариант 5

$x = array_pop((array_slice($array, -1, 1)));

Вариант 6

$x = end($array); reset($array);

На больших массивах также работает хорошо.

Эта опция сбивает внутренний указатель массива.

Вариант 7

$x = end((array_values($array)));

В последних версиях PHP этот вариант стал очень медленным. Рекомендуется его избегать.

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

Вариант 8

$x = $array[count($array)-1];

На больших массивах также работает хорошо.

Из-за использования count рекомендуется использовать только на автоиндексируемых массивах.

Вариант 9

$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];

В последних версиях PHP этот вариант стал очень медленным. Рекомендуется его избегать.

Вариант 10

$x = $array[] = array_pop($array);

На больших массивах также работает хорошо.

Из-за того, что получение значения приводит к потере оригинального ключа рекомендуется использовать только на авто индексируемых массивах.

Заключение

Все рассмотренные ограничения снимаются новой функцией array_key_last, поэтому в конечном счёте рекомендует использовать именно её.

Источник: https://stackoverflow.com/questions/3687358/whats-the-best-way-to-get-the-last-element-of-an-array-without-deleting-it. По ссылке также имеются бенчмарки запусках этих вариантов в различных условиях (различные варианты массивов), а также с некорректными данными.

Рекомендуемые статьи:

1 Комментарий

  1. Vobuxaz

    Самое классное - это, конечно, богатое форматирование

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *