I cannot find an effective solution on rearranging/swapping an array item by its value by shifting by - 1
or + 1
. I\'m making an order on tables, i
A useful function for the more general problem of moving an element of an array from one position to another:
function array_move(&$a, $oldpos, $newpos) {
if ($oldpos==$newpos) {return;}
array_splice($a,max($newpos,0),0,array_splice($a,max($oldpos,0),1));
}
This can then be used to solve the specific problem in the original question:
// shift up
array_move($array,$index,$index+1);
// shift down
array_move($array,$index,$index-1);
Note, there's no need to check whether or not you're already at the start/end of the array. Note also, this function does not preserve the array keys - moving elements while preserving keys is more fiddly.