My version uses only ArrayToString, ArrayFromString and string functions. It won't rotate if the default delimiter is found in the array.
#include <Array.au3>
Local $aArray[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_ArrayDisplay($aArray, "BEFORE rotation")
If _ArrayRotate($aArray, 4) Then
_ArrayDisplay($aArray, "AFTER rotation")
Else
MsgBox(Default, Default, "Array did not rotate!")
EndIf
Exit
Func _ArrayRotate(ByRef $aArray, $iMakeFirst)
; $aArray = array to be rotated
; $iMakeFirst = element number to be rotated into position [0]
; Returns True if successful, False if not
If Not IsArray($aArray) Then Return False ; invalid array
If ($iMakeFirst < 0) Or ($iMakeFirst > UBound($aArray) - 1) Then Return False ; $iMakeFirst parameter is out of bounds
If $iMakeFirst = 0 Then Return True ; no rotation needed, it's already the first element
If StringInStr(_ArrayToString($aArray, ""), "|") Then Return False ; default delimiter found in array
Local $sArray = _ArrayToString($aArray)
Local $iPos = StringInStr($sArray, "|", $STR_NOCASESENSE, $iMakeFirst)
Local $sFirst = StringLeft($sArray, $iPos - 1)
Local $sLast = StringRight($sArray, StringLen($sArray) - $iPos)
$aArray = _ArrayFromString($sLast & "|" & $sFirst)
Return True
EndFunc ;==>_ArrayRotate