awilum.ru
Статьи Курсы Об авторе

Циклический сдвиг массива в PHP

Циклический сдвиг массива - это одна из базовых операций при работе с массивами в программировании. Этот процесс заключается в том, чтобы сдвинуть элементы массива вправо или влево на определенное количество позиций, причем элементы, “выходящие” за границы массива, перемещаются на противоположную сторону. В PHP эту операцию можно выполнять несколькими способами, включая использование встроенных функций языка или написание собственной функции.

Встроенные функции PHP для циклического сдвига массива

PHP предоставляет несколько встроенных функций для работы с массивами, которые могут быть использованы для циклического сдвига. Давайте рассмотрим наиболее распространенные из них: array_shift, array_pop, array_unshift и array_push.

array_shift и array_push:

$array = [1, 2, 3, 4, 5];

$shifted_element = array_shift($array); // Удаляем первый элемент массива и сохраняем его

array_push($array, $shifted_element); // Добавляем удаленный элемент в конец массива

print_r($array); // [2, 3, 4, 5, 1]

/*
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 1
)
*/

array_pop и array_unshift:

$array = [1, 2, 3, 4, 5];

$popped_element = array_pop($array); // Удаляем последний элемент массива и сохраняем его

array_unshift($array, $popped_element); // Добавляем удаленный элемент в начало массива

print_r($array);

/*
Array
(
    [0] => 5
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)
*/

Эти функции позволяют циклически сдвигать массив на одну позицию вправо и влево соответственно.

Написание собственной функции для циклического сдвига

Иногда требуется выполнить циклический сдвиг на определенное количество позиций. Для этого можно написать собственную функцию.


function cyclicRotate(array $arr, int $shift): array {
    $size = count($arr);
    $shift = $shift % $size; // Убеждаемся, что сдвиг не превышает размер массива

    // Сдвигаем элементы массива на $shift позиций вправо
    $sliced_array = array_slice($arr, -$shift);
    $rotated_array = array_slice($arr, 0, $size - $shift);
    return array_merge($sliced_array, $rotated_array);
}

$array = [1, 2, 3, 4, 5];

$shifted_array = cyclicRotate($array, 2);

print_r($shifted_array); 

/*
Array
(
    [0] => 4
    [1] => 5
    [2] => 1
    [3] => 2
    [4] => 3
)
*/

Эта функция принимает массив и количество позиций для сдвига. Она использует функции array_slice и array_merge, чтобы эффективно выполнить сдвиг на заданное количество позиций вправо.

Обнаружили ошибку в этой статье? Хотите уточнить, обновить или добавить что-то?
Все мои статьи доступны для редактирования на GitHub. Буду благодарен за любое улучшение или исправление!