Иногда нам не нужен весь массив, а только его часть — "срез" или "кусочек". Например, чтобы показать первые 5 новостей на главной странице или получить список последних трех комментариев. Для таких задач в PHP есть очень гибкая функция `array_slice()`.
Она позволяет "вырезать" часть массива, указывая, с какого элемента начать и сколько элементов взять. Что особенно важно — `array_slice()` не изменяет исходный массив, а возвращает новый, содержащий только нужные вам элементы. В этом уроке мы научимся делать простые и сложные срезы, работать с отрицательными индексами и управлять сохранением ключей.
- Модуль 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+
Простой срез массива
Давай начнем с основ. У нас есть массив цифр, и мы хотим получить все элементы, начиная со второго (с индексом 1). Заполни пропуски, чтобы использовать `array_slice()` для этой задачи.
<?php
$digits = [0, 1, 2, 3, 4];
// Получаем все элементы, начиная с индекса 1
$subset = input1S(input2S, 1);
print_r($subset);Срез с указанием длины
Функция `array_slice()` может принимать и третий аргумент — длину среза. Проанализируй код и напиши в поле для ответа, какие именно буквы (через запятую и пробел) попадут в итоговый массив и будут выведены на экран.
<?php
$letters = ['A', 'B', 'C', 'D', 'E'];
$subset = array_slice($letters, 2, 2);
echo implode(', ', $subset);Срез с отрицательным смещением
Отрицательное смещение — очень удобная возможность `array_slice()`. Оно означает, что отсчет нужно начинать с конца массива. Посмотри на код и выбери, какой срез будет получен в результате.
<?php
$numbers = [10, 20, 30, 40, 50];
$last_two = array_slice($numbers, -2);
print_r($last_two);Срез с отрицательной длиной
Длина среза тоже может быть отрицательной! Это означает "закончить срез за N элементов до конца массива". Нам нужно получить срез, который начинается с индекса `1` и заканчивается, не доходя 2 элемента до конца. Заполни пропуск, чтобы получить нужный результат.
<?php
$items = ['A', 'B', 'C', 'D', 'E', 'F'];
// Начать с индекса 1, закончить за 2 элемента до конца
$middle = array_slice($items, 1, input1S);
print_r($middle);array_slice() не изменяет исходный массив
Это самая частая ошибка при работе с `array_slice()`. Программист вызвал функцию, ожидая, что она изменит массив `$source`, но она этого не делает. Она возвращает новый массив. Исправь строку с `print_r`, чтобы она выводила результат работы `array_slice()`, который сохранен в переменной `$slice`.
<?php$source = ['a', 'b', 'c', 'd'];$slice = array_slice($source, 1, 2);print_r($source);Сохранение ключей: параметр preserve_keys
У `array_slice()` есть четвертый параметр — булево значение `$preserve_keys`. Если он `true`, функция сохранит исходные ключи. Посмотри на код и выбери, как будет выглядеть массив в результате.
<?php
$letters = [
0 => 'A',
1 => 'B',
2 => 'C',
3 => 'D'
];
$subset = array_slice($letters, 2, 2, true);
print_r($subset);Срез ассоциативного массива
Функция `array_slice()` прекрасно работает и с ассоциативными массивами. При этом она по умолчанию сохраняет строковые ключи. Используя токены из банка, получи срез массива `$config`, который содержит только `'user'` и `'password'`.
<?php
$config = [
'host' => 'localhost',
'user' => 'root',
'password' => 'secret',
'db' => 'main'
];
$credentials = array_slice($config, input1S, input2S);
print_r($credentials);