<?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_circular(array $array, $steps = 1)
{
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 = array("1" => "Primeiro", "2"=>"Segundo", "3"=>"Terceiro", "4"=> "Quarto");
$l = count($a);
for ($i = $l * -2; $i <= $l * 2; $i++) {
printf("% 3s : %s\n", $i, implode(', ', array_shift_circular($a, $i)));
}
?>
preferences:
56.18 ms | 402 KiB | 5 Q