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() (возвращает его) позволяет получить значение без удаления.
Аналогична для первого элемента. Сбрасывает указатель массива на первый элемент.
Выбор функции зависит от задачи: array_pop и array_shift изменяют массив, а end и reset только перемещают внутренний указатель.
Распространенные ошибки
В PHP 8 это вызывает TypeError.
$variable = "строка";
$result = array_pop($variable); // TypeErrorFatal error: Uncaught TypeError: array_pop(): Argument #1 ($array) must be of type array, string given...
Если массив может быть пустым, результат нужно проверять.
$data = [];
$last = array_pop($data);
// Ошибка, если ожидалась строка
echo strtoupper($last); // Предупреждение для NULLWarning: 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); // Копия не изменится только при копировании до popOriginal: 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.
Изменений в поведении возвращаемого значения или основных алгоритмов не было.
Расширенные примеры применения
$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
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() возвращает только значение. Для получения ключа последнего элемента можно использовать комбинацию функций.
$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
)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# для списков (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