Новый комментарий

EWA 29.11.2018 в 14:16

<?php
function shiftToRight(array $array, int $n): array
{
    $x = count($array);

    if($n > $x){
        $n -= $x;
    }

    if($n == $x){
        return $array;
    }

    if($n < $x){
    for($i = 1; $i <= $n; $i++){
        $last = array_pop($array);
        array_unshift($array, $last);

    }
    return $array;
    }
}
?>
ilyaOrlov 01.12.2018 в 23:09
<?php

function shift(array $array, int $n): array
{
    for ($count = 0; $count < $n ; $count ++) { 
        $tmpNum = array_pop($array);
        array_unshift($array, $tmpNum);
    }
    return $array;
}

?>
den 02.12.2018 в 12:40
function shiftToRight(array $array, int $n): array
{
    $shift = count($arr) % $n;
    if ($shift !== 0) {
        for($i = 0; $i < $shift; $i++) {
            $lastElement = array_pop($array);
            array_unshift($array, $lastElement);
        }
    }
    return $array;
}
ivashkevich 02.12.2018 в 12:42

Во, остаток от деления подъехал. Неплохо! =)

den 02.12.2018 в 13:12

да, а про array_splice() забыл)

virtual2018 02.12.2018 в 13:28
function shiftArrayRight(array $array, int $n) : array 
{
    $countOfArray = count($array);
    if ($n == $countOfArray)
        return $array;
    if ($n > $countOfArray) {
        $n = $n - $countOfArray;
    }
    if ( $countOfArray / 2 > $n) {
        list($arrayTempFirst, $arrayTempSecond) = array_chunk($array, $countOfArray - $n);
        return array_merge($arrayTempSecond, $arrayTempFirst);
    }
    else {
        list($arrayTempFirst, $arrayTempSecond) = array_chunk(array_reverse($array), $n);
        return array_merge(array_reverse($arrayTempFirst), array_reverse($arrayTempSecond));
        }
}
virtual2018 02.12.2018 в 13:58

вариант 2

function shiftArrayRight(array $array, int $n) : array
{
    $countOfArray = count($array);
    if ($n == $countOfArray)
        return $array;
    if ($n > $countOfArray) {
        $n = $n - $countOfArray;
    }
    if ( $countOfArray / 2 > $n) {
        return array_merge(array_slice($array, $countOfArray - $n, $countOfArray - $n), array_slice($array, 0, $countOfArray - $n));
    }
    return array_merge(array_slice($array, $countOfArray - $n, $n), array_slice($array, 0, $countOfArray - $n));
}
[email protected] 02.12.2018 в 21:09
<?php
function shiftToRight(array &$array, int $n)
{
    if (count($array) > $n) {
        for ($i=1; $i <= $n; $i++) {
    $first = array_shift($array);
    $array[] = $first;}
}
        else {
            $x = count($array) - $n;
            for ($i = 1; $i <= $n; $i++)
            {
                $first = array_shift($array);
                $array[] = $first;
            }
        }
}

$array = [0,1,2,3,4,5,6,7,8,9];
shiftToRight($array, 11);
var_dump($array);
SIGTTD 03.01.2019 в 16:43

Сначала подумал, что на собесе нельзя будет удобные функции применять, поэтому вот)

function shiftToRight(array $array, int $n): array {
    $overlaps = $n % count($array);
    $result = [];
    for ($i = 0; $i < count($array); $i++) {
        if ($overlaps + $i < count($array)) {
            $result[] = $array[$overlaps + $i];
        } else {
            $result[] = $array[$overlaps + $i - count($array)];
        }
    }
    return $result;
}
$arrToShift = ['a', 'b', 'c', 'd', 'e', 'f'];
var_dump(shiftToRight($arrToShift, 104));
Bogdan 05.02.2020 в 19:11
    function shiftToRight(array $array, int $n): array
    {
        $n = \count($array) > $n 
            ? $n
            : $n % \count($array);

        return \array_merge(\array_splice($array, -$n), $array) ;
    }
Логические задачи с собеседований