Часто в программировании возникает необходимость "перевернуть" массив, чтобы последний элемент стал первым, предпоследний — вторым, и так далее. Для этой задачи в PHP есть простая и удобная функция — `array_reverse()`.
Она принимает массив и возвращает новый, с элементами в обратном порядке. Это полезно для вывода новостей или комментариев от самых свежих к самым старым, обработки списков и многих других задач. В этом тренажере мы разберем, как работает эта функция, как она обращается с ключами массива и как использовать ее необязательный параметр для сохранения исходных ключей.
- Модуль 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+
Базовый разворот массива
Давайте начнем с простого примера. У нас есть нумерованный массив. Ваша задача — использовать нужную функцию, чтобы развернуть его и получить новый массив `$reversed_numbers`, в котором элементы идут в обратном порядке.
<?php
$numbers = [10, 20, 30, 40];
// Разворачиваем массив
$reversed_numbers = input1S(input2S);
print_r($reversed_numbers);
?>Что происходит с числовыми ключами?
По умолчанию `array_reverse()` не сохраняет числовые ключи, а переиндексирует их заново с нуля. Посмотрите на код и выберите вариант, который правильно отражает результат работы функции с нумерованным массивом.
<?php
$letters = ['a', 'b', 'c'];
// Ключи: 0 1 2
$reversed_letters = array_reverse($letters);
print_r($reversed_letters);
?>Забыли присвоить результат
Как и многие другие функции для работы с массивами, `array_reverse()` не изменяет исходный массив. Программист забыл об этом и ожидал, что массив `$steps` изменится. Исправьте код, чтобы он выводил развернутый массив.
<?php$steps = ['one', 'two', 'three']; // Ошибка: результат не сохраняетсяarray_reverse($steps); // Выводится исходный, неизмененный массивprint_r($steps);?>Разворот ассоциативного массива
В отличие от числовых ключей, строковые (ассоциативные) ключи при развороте массива сохраняются по умолчанию. Проанализируйте код и впишите в поле ответа то, что выведет `print_r()`.
<?php
$data = [
'first' => 100,
'second' => 200,
'third' => 300
];
$reversed_data = array_reverse($data);
print_r($reversed_data);
?>Сохранение числовых ключей
Что если мы все-таки хотим сохранить исходные числовые ключи при развороте? Для этого `array_reverse()` имеет второй, необязательный параметр. Перетащите из банка правильное значение, чтобы включить режим сохранения ключей.
<?php
$items = ['A', 'B', 'C'];
// Ключи: 0 1 2
// Разворачиваем массив с сохранением ключей
$reversed_items = array_reverse($items, input1S);
print_r($reversed_items);
?>Сравнение режимов разворота
Чтобы закрепить материал, посмотрите на два варианта разворота одного и того же массива: один с параметром `true`, другой без него. Какой из вариантов выведет `print_r($with_keys)`?
<?php
$source = [10 => 'ten', 20 => 'twenty'];
$without_keys = array_reverse($source);
$with_keys = array_reverse($source, true);
print_r($with_keys);
?>Практический пример: лента новостей
У вас есть массив новостей, отсортированный от старых к новым. Соберите из фрагментов скрипт, который развернет этот массив, чтобы показать самые свежие новости первыми, и выведет их. В банке есть лишние строки.
$news = ["Новость 1", "Новость 2", "Новость 3"];print_r($latest_news);<?php?>$latest_news = array_reverse($news);$latest_news = sort($news);echo $latest_news;