A to jak ma indexy przemieszczać to inna bajka. Zaraz wkleję swoje wypociny w ten post

<?php
function array_move_index($aArray, $sArrayIndex, $sDirection) {
$valueAtIndexFound = $values[$searchedIndexPosition];
/**
* Move Up
*/
if($sDirection == 'up') {
$mIndexAtPrevPosition = $keys[$searchedIndexPosition-1];
$mValueAtPrevPosition = $values[$searchedIndexPosition-1];
$tmp = $keys[$searchedIndexPosition];
$keys[$searchedIndexPosition] = $keys[$searchedIndexPosition-1];
$keys[$searchedIndexPosition-1] = $tmp;
$tmp = $values[$searchedIndexPosition];
$values[$searchedIndexPosition] = $values[$searchedIndexPosition-1];
$values[$searchedIndexPosition-1] = $tmp;
}
/**
* Move down
*/
else {
$mIndexAtPrevPosition = $keys[$searchedIndexPosition+1];
$mValueAtPrevPosition = $values[$searchedIndexPosition+1];
$tmp = $keys[$searchedIndexPosition];
$keys[$searchedIndexPosition] = $keys[$searchedIndexPosition+1];
$keys[$searchedIndexPosition+1] = $tmp;
$tmp = $values[$searchedIndexPosition];
$values[$searchedIndexPosition] = $values[$searchedIndexPosition+1];
$values[$searchedIndexPosition+1] = $tmp;
}
return array_combine($keys, $values);
}
'index1' => 'elem1',
'index2' => 'elem2',
'index3' => 'elem3',
'index4' => 'elem4',
'index5' => 'elem5',
'index6' => 'elem6',
'index7' => 'elem7',
'index8' => 'elem8'
);
$newArray = array_move_index($oldArray, 'index6', 'down');
echo '<br>Array before movement<br /><pre>';
echo '<br>Array after movement<br /><pre>'; ?>
Brak zabezpieczenia przed próbą przesunięcia w górę elementu z pierwszej pozycji (i analogicznie przesunięcia w dół elementu ostatniego). Zapewne dałoby się dużo prościej, ale to działa ;P