In answer to your first question, you can use a list of conditional replacement rule:
phases = {0, -45, -90, -135, -180, -225, -270}
phases /. {x_ /; x < -180 -> x + 360, x_ /; x > +180 -> x - 360}
gives: {0, -45, -90, -135, -180, 135, 90}
For the general case, I think the best is to build a function that does the job an Map the function on the list. Based for example on the function x - Floor[x] or Mod we can sculpt the desired function that maps the full interval in -180/+180 after a few steps (a graphics for visualization helps a lot). After a few iterations I got:
360 (-1/2 + (x - 180)/360 - Floor[(x - 180)/360]
Which simplified by MMA in:
f[x_] = x + 360 (Ceiling[1/2 - x/360] - 1)
The function
Mod[x, 360, 180] - 360
does the same job
Then you map the function to the list:
f /@ phases
and get tje same result for any value ouside the range -180/+180
In[76]:= phases = Table[-45 n, {n, 0, 18}]
Out[76]= {0, -45, -90, -135, -180, -225, -270, -315, -360, -405, \
-450, -495, -540, -585, -630, -675, -720, -765, -810}
then:
In[77]:= f /@ phases
Out[77]= {0, -45, -90, -135, -180, 135, 90, 45, 0, -45, -90, -135, \
-180, 135, 90, 45, 0, -45, -90}
This should work even with MMA 2.2 :)
Christian