Take one array as your order:
$order = array('north', 'east', 'south', 'west');
You can sort another array based on values using
/* sort by value: */
$array = array('south', 'west', 'north');
$sorted = array_intersect($order, $array);
Or in your case, to sort by keys, use
/* sort by key: */
$array = array_flip($array);
$sorted = array_intersect_key(array_flip($order), $array);
Both functions will keep the order of the first parameter and will only return the values (or keys) from the second array.
So for these two standard cases you don’t need to write a function on your own to perform the sorting/re-arranging.