Are you stupid? read the manual!
aahh... feels good to shout that every now and then.
But it is quite correct, the manual does have a sh*tload of functions for arrays, including such goodies as
array_unshift() to add a new element to the beginning of the array, and array_pop() to take one elelent off the end of an array, and the ever-complex array_slice() and array_splice()
The thing to note is that you don't have to shift elements around at all. You can always just create a new array and fill that by picking the elements from the old array in the right order.
In your example you can either pop element4 off the end and unshift it into the beginning, or you can create a new array that contains element4 plus elements 1 through 3. Same effect, but possibly a lot easier to implement.
A forum, a FAQ, what else do you need?