#include <Array.au3>
Global $a1[6] = [5, 'раз', 'два', 'три', 'четыре', 'пять'], _
$a2[6][3] = [['ноль', 'ноль', 'ноль'],['раз', 'раз', 'раз'],['два', 'два', 'два'],['три', 'три', 'три'],['четыре', 'четыре', 'четыре'],['пять', 'пять', 'пять']]
ConsoleWrite(_ArrayPushEx($a1, 3, 1) & @LF)
_ArrayDisplay($a1)
ConsoleWrite(_ArrayPushEx($a2, 0) & @LF)
_ArrayDisplay($a2)
Func _ArrayPushEx(ByRef $a_Array, $i_Index, $i_Start = 0)
Local $i_Ub1, $i_Ub2, $a_Tmp
If Not IsArray($a_Array) Then Return SetError(1, 0, False)
If UBound($a_Array, 0) > 2 Then Return SetError(2, 0, False)
$i_Ub1 = UBound($a_Array, 1)
$i_Ub2 = UBound($a_Array, 2)
Switch $i_Start
Case 0, 1
Case Else
Return SetError(3, 0, False)
EndSwitch
If $i_Start > $i_Ub1 - 1 Then Return SetError(4, 0, False)
If ($i_Index < $i_Start) Or ($i_Index > $i_Ub1 - 1) Then Return SetError(5, 0, False)
$a_Tmp = $a_Array
If $i_Ub2 Then
For $i = $i_Start To $i_Index - 1
For $j = 0 To $i_Ub2 - 1
$a_Array[$i][$j] = $a_Tmp[$i][$j]
Next
Next
For $i = $i_Index To $i_Ub1 - 2
For $j = 0 To $i_Ub2 - 1
$a_Array[$i][$j] = $a_Tmp[$i + 1][$j]
Next
Next
For $j = 0 To $i_Ub2 - 1
$a_Array[$i_Ub1 - 1][$j] = $a_Tmp[$i_Index][$j]
Next
Else
For $i = $i_Start To $i_Index - 1
$a_Array[$i] = $a_Tmp[$i]
Next
For $i = $i_Index To $i_Ub1 - 2
$a_Array[$i] = $a_Tmp[$i + 1]
Next
$a_Array[$i_Ub1 - 1] = $a_Tmp[$i_Index]
EndIf
Return True
EndFunc ;==>_ArrayPushEx