Array pop: примеры (PHP)

Изучаем функцию array_pop для работы с массивами в PHP
Раздел: Работа с массивами
array_pop(array &$array): mixed

Основы функции array_pop

Функция array_pop() извлекает и возвращает последний элемент массива. При этом размер массива уменьшается на один элемент.

Этот метод применяется для реализации структур данных, таких как стек (LIFO - "последним пришел, первым ушел"). Использование актуально при обработке очередей задач, разборе списков или последовательном извлечении элементов с конца коллекции.

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

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

  • &$array - Переменная с массивом, передаваемая по ссылке. После выполнения операции исходный массив изменяется.

Простые примеры использования

Базовое применение

Извлечение последнего элемента из индексированного массива:

$fruits = ['Яблоко', 'Банан', 'Апельсин'];
$lastFruit = array_pop($fruits);
print_r($fruits);
echo "Извлеченный элемент: $lastFruit";
Array
(
    [0] => Яблоко
    [1] => Банан
)
Извлеченный элемент: Апельсин
Работа с ассоциативным массивом

Функция работает и с ассоциативными массивами, удаляя последнюю пару ключ-значение:

$user = ['id' => 101, 'name' => 'Иван', 'role' => 'admin'];
$removedValue = array_pop($user);
print_r($user);
echo "Удаленное значение: $removedValue";
Array
(
    [id] => 101
    [name] => Иван
)
Удаленное значение: admin
Обработка пустого массива
$emptyArray = [];
$result = array_pop($emptyArray);
var_dump($result);
print_r($emptyArray);
NULL
Array
(
)

Похожие функции в PHP

Для работы с массивами в PHP существует несколько родственных функций.

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

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

end() с current()

Комбинация функций end() (устанавливает указатель на последний элемент) и current() (возвращает его) позволяет получить значение без удаления.

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

Выбор функции зависит от задачи: array_pop и array_shift изменяют массив, а end и reset только перемещают внутренний указатель.

Распространенные ошибки

Передача не массива

В PHP 8 это вызывает TypeError.

$variable = "строка";
$result = array_pop($variable); // TypeError
Fatal error: Uncaught TypeError: array_pop(): Argument #1 ($array) must be of type array, string given...
Использование результата без проверки

Если массив может быть пустым, результат нужно проверять.

$data = [];
$last = array_pop($data);
// Ошибка, если ожидалась строка
echo strtoupper($last); // Предупреждение для NULL
Warning: strtoupper() expects parameter 1 to be string, null given...
Игнорирование изменения исходного массива

Поскольку функция работает по ссылке, исходный массив изменяется.

$original = [1, 2, 3];
$copy = $original;
$last = array_pop($original);
echo "Original: "; print_r($original);
echo "Copy: "; print_r($copy); // Копия не изменится только при копировании до pop
Original: Array ( [0] => 1 [1] => 2 )
Copy: Array ( [0] => 1 [1] => 2 [2] => 3 )

Изменения в последних версиях PHP

В PHP 7.3 и более ранних версиях функция могла принимать только переменную, передаваемую по ссылке. Возвращаемое значение для пустого массива всегда было NULL.

Начиная с PHP 8.0:

  • Функция имеет строгую типизацию. При передаче не массива возникает исключение TypeError, а не предупреждение.
  • Сигнатура функции явно указывает на передачу аргумента по ссылке: array_pop(array &$array): mixed.

Изменений в поведении возвращаемого значения или основных алгоритмов не было.

Расширенные примеры применения

Реализация стека (LIFO)
Пример php
$stack = [];
array_push($stack, 'Task1', 'Task2');
// Или $stack[] = 'Task3';
$stack[] = 'Task3';
while ($task = array_pop($stack)) {
    echo "Выполняется: $task\n";
}
echo "Все задачи выполнены. Осталось элементов: " . count($stack);
Выполняется: Task3
Выполняется: Task2
Выполняется: Task1
Все задачи выполнены. Осталось элементов: 0
Рекурсивная обработка вложенных массивов
Пример php
function cleanArray(&$array) {
    $last = array_pop($array);
    if (is_array($last)) {
        cleanArray($last);
        $array[] = $last;
    } elseif ($last !== null) {
        $array[] = trim($last);
    }
}

$data = ['text ', ['inner '], 'end'];
cleanArray($data);
print_r($data);
Array
(
    [0] => text
    [1] => Array
        (
            [0] => inner
        )
    [2] => end
)
Обработка массива с получением ключа

array_pop() возвращает только значение. Для получения ключа последнего элемента можно использовать комбинацию функций.

Пример php
$colors = ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'];
end($colors);
$lastKey = key($colors);
$lastValue = array_pop($colors);
echo "Ключ: $lastKey, Значение: $lastValue\n";
print_r($colors);
Ключ: b, Значение: Blue
Array
(
    [r] => Red
    [g] => Green
)
Безопасное извлечение из потенциально пустого массива
Пример php
function safePop(&$array, $default = null) {
    return !empty($array) ? array_pop($array) : $default;
}

$queue = [];
echo "Результат: " . safePop($queue, 'Очередь пуста');
Результат: Очередь пуста

Аналоги в других языках

Array pop в Javascript

Метод Array.prototype.pop() обладает идентичной функциональностью.

let fruits = ['Apple', 'Banana', 'Orange'];
let last = fruits.pop();
console.log(fruits); // ['Apple', 'Banana']
console.log(last); // 'Orange'

Array pop в Python

Метод list.pop() извлекает элемент по индексу (по умолчанию последний). В отличие от PHP, может удалять элемент из любой позиции.

fruits = ['Apple', 'Banana', 'Orange']
last = fruits.pop()
print(fruits) # ['Apple', 'Banana']
print(last) # 'Orange'

second = fruits.pop(0) # Удаляет первый элемент
print(second) # 'Apple'

Array pop в MySQL

Прямого аналога нет, но для работы с JSON-массивами можно использовать функцию JSON_REMOVE().

-- Удаление последнего элемента JSON-массива
SET @json = '["a", "b", "c"]';
SELECT JSON_REMOVE(@json, CONCAT('$[', JSON_LENGTH(@json)-1, ']'));
-- Результат: ["a", "b"]
C#

В C# для списков (List<T>) используется метод RemoveAt с индексом последнего элемента.

var list = new List { "A", "B", "C" };
string last = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
Console.WriteLine(String.Join(", ", list)); // A, B

PHP array_pop function comments

En
Array pop Pops the element off the end of array