$step = ($in_front_of_key<$put_key)? -1 : 1;
^ besser <=
dann sollte es auch im fall $in_front_of_key==$put_key nicht schiefgehen.
dass die zuordnung zwischen keys und values eine bijektion (eindeutig umkehrbar) sein muss, damit dein vorhaben funktioniert, weisst du vermutlich selbst. anmerken wollte ich's sicherheitshalber trotzdem noch.
es kann uebrigens sein, dass deine urspruengliche idee, verknuepft mit dem vorschlag von SorgenkindMech (und vielleicht noch besser mit einem vorher "deklarierten" array), dennoch schneller ist. dazu muesste man sich den quellcode von php genauer anschauen.
aber wenn es dir um performance ginge, wuerdest du vermutlich eh nicht zu php greifen. ;-)
prost
seth