# Array Rotation

Is there a more concise way of rotating an array leftwards X times than this?

``````
for(\$i = 0; \$i < \$x; \$i++) {
array_push(\$array,array_shift(\$array));
}

``````
``````
\$a=array_merge(array_slice(\$a,\$x), array_slice(\$a,0,\$x));

``````

Itâ€™s better readable (IMHO), but slightly slower.

``````
set_time_limit(0);
class Stopwatch
{
private \$_starttime;
function __construct() {}

public function start()
{
\$mtime = microtime();
list(\$usec, \$sec) = split(' ', \$mtime);
\$this->_starttime = (float)\$usec + (float)\$sec;
}

public function stop()
{
\$mtime = microtime();
list(\$usec, \$sec) = split(' ', \$mtime);
return (((float)\$usec + (float)\$sec) - (float)\$this->_starttime);
}
}

\$s=new StopWatch;
\$x=2;

\$s->start();
for (\$j=0;\$j<100000;\$j++) {
\$a=array(1,2,3,4,5);
\$a=array_merge(array_slice(\$a,\$x), array_slice(\$a,0,\$x));
}
echo 'Method 1: ', \$s->stop(), "\
";

\$s->start();
for (\$j=0;\$j<100000;\$j++) {
\$a=array(1,2,3,4,5);
for (\$i=0; \$i<\$x; \$i++) {
array_push(\$a,array_shift(\$a));
}
}
echo 'Method 2: ', \$s->stop(), "\
";
/*
Method 1: 0.32495498657227
Method 2: 0.22844004631042
*/

``````