Если `array_push()` и `array_pop()` работают с концом массива, то их "зеркальные" братья — `array_shift()` и `array_unshift()` — отвечают за его начало. Эти функции незаменимы, когда нужно реализовать структуру "очередь" (первым пришел — первым ушел, FIFO).
`array_unshift()` позволяет добавить один или несколько элементов в самое начало массива, сдвигая все остальные элементы "вправо".
`array_shift()` извлекает самый первый элемент, сдвигая оставшиеся "влево" и обновляя их числовые ключи.
В этом уроке мы детально разберем эту пару функций. Ты научишься управлять элементами в начале массива, поймешь важные отличия в их поведении (особенно в том, что они возвращают и как влияют на ключи) и сможешь смоделировать настоящую очередь.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Добавление в начало с array_unshift()
Представь, что у нас есть очередь из двух человек, и кто-то очень важный хочет пройти без очереди. Его нужно поставить в самое начало. Используй функцию `array_unshift()`, чтобы добавить 'VIP-клиент' в начало массива `$queue`.
<?php
$queue = ['Клиент 1', 'Клиент 2'];
input1S($queue, 'VIP-клиент');
print_r($queue);Извлечение из начала с array_shift()
Теперь обслужим первого человека в очереди. Функция `array_shift()` извлекает самый первый элемент из массива. Используя токены из банка, составь команду, которая удалит первый элемент из массива `$documents`.
<?php
$documents = ['Doc A', 'Doc B', 'Doc C'];
// Обрабатываем первый документ
$processed_doc = input1S(input2S);
echo "Обработан: " . $processed_doc;
print_r($documents);Что возвращает array_shift()?
Аналогично `array_pop()`, функция `array_shift()` не просто удаляет, но и возвращает удаленный элемент. Проанализируй код и напиши в поле для ответа, какое значение будет выведено на экран.
<?php
$line = ['Anna', 'Bob', 'Charles'];
$first_in_line = array_shift($line);
echo $first_in_line;Что возвращает array_unshift()?
Здесь есть важный нюанс! `array_unshift()` возвращает не сам измененный массив, а новое количество элементов в нем (точно так же, как `array_push()`). Посмотри на код и выбери, что будет выведено в результате.
<?php
$letters = ['C'];
$new_count = array_unshift($letters, 'A', 'B');
echo $new_count;Переиндексация после array_shift()
Ключевое отличие `array_shift()` от `unset()` — это то, что `array_shift()` ПЕРЕИНДЕКСИРУЕТ числовые ключи. Они всегда будут идти с 0 без "дырок". Посмотри, что произойдет с массивом, и выбери правильный `print_r` результат.
<?php
$list = [0 => 'A', 1 => 'B', 2 => 'C'];
array_shift($list);
print_r($list);Порядок аргументов в array_unshift()
Программист перепутал порядок аргументов в `array_unshift()`. Первым всегда должен идти массив, а затем — добавляемые элементы. Исправь строку, чтобы она работала корректно.
<?php$letters = ['B', 'C'];array_unshift('A', $letters);print_r($letters);Имитация очереди (FIFO)
Очередь работает по принципу "первым пришел — первым ушел" (FIFO). Давай смоделируем это. Собери скрипт, который: 1. Создает пустую очередь. 2. Добавляет в конец "Клиент A". 3. Добавляет в конец "Клиент B". 4. Обслуживает (извлекает из начала) первого клиента и выводит его имя.
array_push($queue, "Клиент A");$served = array_shift($queue);<?php$queue = [];echo "Обслужен: " . $served;array_push($queue, "Клиент B");$served = array_pop($queue);?>array_shift() и ассоциативный массив
А что `array_shift()` делает со строковыми ключами? В отличие от числовых, она их НЕ трогает. Посмотри на код и выбери, как будет выглядеть массив после удаления первого элемента.
<?php
$config = [
'host' => 'localhost',
'user' => 'admin',
'pass' => '123'
];
array_shift($config);
print_r($config);