Zahlen verschieben

kevkev

Erfahrenes Mitglied
Hi,

Ich versuche gerade eine Range aus Zahlen um 1 zu verschieben.

Beispiel:
0 1 2 3 4

Nun möchte Ich diese ganze Zahlenkette um eins "verschieben":
1 2 3 4 0

Oder auch um 2:
2 3 4 0 1

Wie mache Ich das am besten ohne Schleifen zu verwenden?
Das sieht bei mir mit Schleifen nicht besonders "cool" aus:
PHP:
$array=array(0,1,2,3);
$Start=1;
for ($x=0;$x<$Start;$x++) { next($array); };
for ($i=0; $i<sizeof($array); $i++) {
	echo current($array);
	next($array);
	if (current($array)=="") {reset($array);}
}

Danke :).

Gruß Kevin
 
Zuletzt bearbeitet:
Mit der array_slice()-Funktion wäre das möglich:
PHP:
function array_move( $array, $movement )
{
	$size = sizeof($array);
	$retVal = array_merge(array_slice($array, $movement % $size), array_slice($array, 0, $movement % $size));
	return $retVal;
}
 
Danke, funktioniert ohne Probleme.
Nur brauch Ich wohl noch ein bisschen länger um den Code zu verstehen :).
 
Hallo,

eine weitere Möglichkeit:
PHP:
<?php

function array_rotate($array, $amount) {
	$amount %= count($array);
	if ($amount > 0) {
		$carry = array_splice($array, 0, $amount);
		$result = array_merge($array, $carry);
	} elseif ($amount < 0) {
		$carry = array_splice($array, $amount);
		$result = array_merge($carry, $array);
	} else {
		$result = $array;
	}
	return $result;
}

$range = range(0, 4);

for ($i = -4; $i <= 4; $i++) {
	echo $i . ":\t" . join('', array_rotate($range, $i)) . "\n";
}

?>

Grüße,
Matthias
 
Zurück