<?php // This code is public domain. The original author is Marc Ermshaus.
error_reporting(-1);
/**
* Circularly shifts an array
*
* Shifts to right for $steps > 0. Shifts to left for $steps < 0. Keys are
* preserved.
*
* @param array $array Array to shift
* @param int $steps Steps to shift array by
* @return array Resulting array
*/
function array_shift_circular(array $array, $steps = 1)
{
if (!is_int($steps)) {
throw new InvalidArgumentException(
'steps has to be an (int)');
}
if ($steps === 0) {
return $array;
}
$l = count($array);
if ($l === 0) {
return $array;
}
$steps = $steps % $l;
$steps *= -1;
return array_merge(array_slice($array, $steps),
array_slice($array, 0, $steps));
}
header('content-type: text/plain');
$a = range(0, 9);
$l = count($a);
for ($i = $l * -2; $i <= $l * 2; $i++) {
printf("% 3s : %s\n", $i, implode(', ', array_shift_circular($a, $i)));
}
?>
- Output for 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
- -20 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
-19 : 9, 0, 1, 2, 3, 4, 5, 6, 7, 8
-18 : 8, 9, 0, 1, 2, 3, 4, 5, 6, 7
-17 : 7, 8, 9, 0, 1, 2, 3, 4, 5, 6
-16 : 6, 7, 8, 9, 0, 1, 2, 3, 4, 5
-15 : 5, 6, 7, 8, 9, 0, 1, 2, 3, 4
-14 : 4, 5, 6, 7, 8, 9, 0, 1, 2, 3
-13 : 3, 4, 5, 6, 7, 8, 9, 0, 1, 2
-12 : 2, 3, 4, 5, 6, 7, 8, 9, 0, 1
-11 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
-10 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
-9 : 9, 0, 1, 2, 3, 4, 5, 6, 7, 8
-8 : 8, 9, 0, 1, 2, 3, 4, 5, 6, 7
-7 : 7, 8, 9, 0, 1, 2, 3, 4, 5, 6
-6 : 6, 7, 8, 9, 0, 1, 2, 3, 4, 5
-5 : 5, 6, 7, 8, 9, 0, 1, 2, 3, 4
-4 : 4, 5, 6, 7, 8, 9, 0, 1, 2, 3
-3 : 3, 4, 5, 6, 7, 8, 9, 0, 1, 2
-2 : 2, 3, 4, 5, 6, 7, 8, 9, 0, 1
-1 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
0 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
1 : 9, 0, 1, 2, 3, 4, 5, 6, 7, 8
2 : 8, 9, 0, 1, 2, 3, 4, 5, 6, 7
3 : 7, 8, 9, 0, 1, 2, 3, 4, 5, 6
4 : 6, 7, 8, 9, 0, 1, 2, 3, 4, 5
5 : 5, 6, 7, 8, 9, 0, 1, 2, 3, 4
6 : 4, 5, 6, 7, 8, 9, 0, 1, 2, 3
7 : 3, 4, 5, 6, 7, 8, 9, 0, 1, 2
8 : 2, 3, 4, 5, 6, 7, 8, 9, 0, 1
9 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
10 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
11 : 9, 0, 1, 2, 3, 4, 5, 6, 7, 8
12 : 8, 9, 0, 1, 2, 3, 4, 5, 6, 7
13 : 7, 8, 9, 0, 1, 2, 3, 4, 5, 6
14 : 6, 7, 8, 9, 0, 1, 2, 3, 4, 5
15 : 5, 6, 7, 8, 9, 0, 1, 2, 3, 4
16 : 4, 5, 6, 7, 8, 9, 0, 1, 2, 3
17 : 3, 4, 5, 6, 7, 8, 9, 0, 1, 2
18 : 2, 3, 4, 5, 6, 7, 8, 9, 0, 1
19 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
20 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
preferences:
150.53 ms | 406 KiB | 159 Q