Dim $Array1[2] = [1, 2]
Dim $Array2[2] = ['1', '2']
$iCompare = _ArrayCompare($Array1, $Array2, 0, -1, 1, 1)
If @error Then
ConsoleWrite('$Array1 and $Array2 are NOT identical arrays' & @LF & 'ERROR: ' & @error & @LF)
ElseIf $iCompare = 0 Then
ConsoleWrite('$Array1 and $Array2 are identical arrays' & @LF)
ElseIf $iCompare = 1 Then
ConsoleWrite('$Array1 and $Array2 are NOT identical arrays' & @LF)
EndIf
Func _ArrayCompare(Const ByRef $avArray1, Const ByRef $avArray2, $iArrStart=0, $iArrEnd=-1, $iCaseSense=1, $iVarTypeSense=0)
If Not IsArray($avArray1) Or Not IsArray($avArray2) Then
Return SetError(1, 0, 0)
EndIf
Local $iDims1 = UBound($avArray1, 0), $iUBound1 = UBound($avArray1, 1) - 1, $iSubMax1 = UBound($avArray1, 2) - 1
Local $iDims2 = UBound($avArray2, 0), $iUBound2 = UBound($avArray2, 1) - 1, $iSubMax2 = UBound($avArray2, 2) - 1
If $iArrStart < -1 Or $iArrStart > $iUBound1 Or $iArrEnd < -1 Or $iArrEnd > $iUBound1 Or ($iArrStart > $iArrEnd And $iArrEnd > -1) Then
Return SetError(-1, 0, 0)
EndIf
If $iDims1 <> $iDims2 Or $iUbound1 <> $iUbound2 Or $iSubMax1 <> $iSubMax2 Then
Return SetError(2, 0, 0)
EndIf
If $iDims1 > 2 Or $iDims2 > 2 Then
Return SetError(3, 0, 0)
EndIf
If $iArrStart = -1 Or (IsKeyword($iArrStart) And $iArrStart = Default) Then
$iArrStart = 0
EndIf
If $iArrEnd = -1 Or (IsKeyword($iArrEnd) And $iArrEnd = Default) Then
$iArrEnd = $iUbound1
EndIf
If $iDims1 = 2 Then
For $i = $iArrStart To $iArrEnd
For $j = 0 To $iSubMax1
If StringCompare($avArray1[$i][$j], $avArray2[$i][$j], $iCaseSense) <> 0 Then ;The strings are NOT equal
Return 1
EndIf
If $iVarTypeSense And VarGetType($avArray1[$i][$j]) <> VarGetType($avArray2[$i][$j]) Then
Return 1
EndIf
Next
Next
Else
For $i = $iArrStart To $iArrEnd
If StringCompare($avArray1[$i], $avArray2[$i], $iCaseSense) <> 0 Then ;The strings are NOT equal
Return 1
EndIf
If $iVarTypeSense And VarGetType($avArray1[$i]) <> VarGetType($avArray2[$i]) Then
Return 1
EndIf
Next
EndIf
Return 0
EndFunc