Функция array_slice()

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Иногда нам не нужен весь массив, а только его часть — "срез" или "кусочек". Например, чтобы показать первые 5 новостей на главной странице или получить список последних трех комментариев. Для таких задач в PHP есть очень гибкая функция `array_slice()`.

Она позволяет "вырезать" часть массива, указывая, с какого элемента начать и сколько элементов взять. Что особенно важно — `array_slice()` не изменяет исходный массив, а возвращает новый, содержащий только нужные вам элементы. В этом уроке мы научимся делать простые и сложные срезы, работать с отрицательными индексами и управлять сохранением ключей.

Список тем

Простой срез массива

id: 38966_task_slice_1

Давай начнем с основ. У нас есть массив цифр, и мы хотим получить все элементы, начиная со второго (с индексом 1). Заполни пропуски, чтобы использовать `array_slice()` для этой задачи.

Заполните пропуски
<?php

$digits = [0, 1, 2, 3, 4];

// Получаем все элементы, начиная с индекса 1
$subset = input1S(input2S, 1);

print_r($subset);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Срез с указанием длины

id: 38966_task_slice_2

Функция `array_slice()` может принимать и третий аргумент — длину среза. Проанализируй код и напиши в поле для ответа, какие именно буквы (через запятую и пробел) попадут в итоговый массив и будут выведены на экран.

Что должно получиться?
<?php

$letters = ['A', 'B', 'C', 'D', 'E'];
$subset = array_slice($letters, 2, 2);

echo implode(', ', $subset);
Сообщения
Проверить
Показать подсказку

Срез с отрицательным смещением

id: 38966_task_slice_3

Отрицательное смещение — очень удобная возможность `array_slice()`. Оно означает, что отсчет нужно начинать с конца массива. Посмотри на код и выбери, какой срез будет получен в результате.

Выберите правильный вариант ответа
<?php

$numbers = [10, 20, 30, 40, 50];
$last_two = array_slice($numbers, -2);

print_r($last_two);
Сообщения
Проверить
Показать подсказку

Срез с отрицательной длиной

id: 38966_task_slice_4

Длина среза тоже может быть отрицательной! Это означает "закончить срез за N элементов до конца массива". Нам нужно получить срез, который начинается с индекса `1` и заканчивается, не доходя 2 элемента до конца. Заполни пропуск, чтобы получить нужный результат.

Заполните пропуски
<?php

$items = ['A', 'B', 'C', 'D', 'E', 'F'];
// Начать с индекса 1, закончить за 2 элемента до конца
$middle = array_slice($items, 1, input1S);

print_r($middle);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

array_slice() не изменяет исходный массив

id: 38966_task_slice_5

Это самая частая ошибка при работе с `array_slice()`. Программист вызвал функцию, ожидая, что она изменит массив `$source`, но она этого не делает. Она возвращает новый массив. Исправь строку с `print_r`, чтобы она выводила результат работы `array_slice()`, который сохранен в переменной `$slice`.

Найдите ошибку и исправьте
<?php
$source = ['a', 'b', 'c', 'd'];
$slice = array_slice($source, 1, 2);
print_r($source);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сохранение ключей: параметр preserve_keys

id: 38966_task_slice_6

У `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);
Сообщения
Проверить
Показать подсказку

Срез ассоциативного массива

id: 38966_task_slice_7

Функция `array_slice()` прекрасно работает и с ассоциативными массивами. При этом она по умолчанию сохраняет строковые ключи. Используя токены из банка, получи срез массива `$config`, который содержит только `'user'` и `'password'`.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$config = [
    'host' => 'localhost',
    'user' => 'root',
    'password' => 'secret',
    'db' => 'main'
];
$credentials = array_slice($config, input1S, input2S);
print_r($credentials);
1
2
'user'
0
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру