<?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; } } ?>
<?php function shift(array $array, int $n): array { for ($count = 0; $count < $n ; $count ++) { $tmpNum = array_pop($array); array_unshift($array, $tmpNum); } return $array; } ?>
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; }
Во, остаток от деления подъехал. Неплохо! =)
да, а про array_splice() забыл)
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)); } }
вариант 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)); }
<?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);
Сначала подумал, что на собесе нельзя будет удобные функции применять, поэтому вот)
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));
function shiftToRight(array $array, int $n): array { $n = \count($array) > $n ? $n : $n % \count($array); return \array_merge(\array_splice($array, -$n), $array) ; }
Во, остаток от деления подъехал. Неплохо! =)
да, а про array_splice() забыл)
вариант 2
Сначала подумал, что на собесе нельзя будет удобные функции применять, поэтому вот)