VBScript array_merge_recursive 関数

二つ以上の配列を再帰的にマージする


Function array_merge_recursive(mAry1,mAry2)

    Dim j
    Dim retAry : set retAry = Server.CreateObject("Scripting.Dictionary")

    If isObject( mAry1 ) Then
        For Each j In mAry1
            if Not retAry.Exists(j) then retAry.Add j, mAry1(j)
        Next

    ElseIf isArray( mAry1 ) Then
        For j = 0 to uBound( mAry1 )
            retAry.Add j, mAry1(j)
        Next

    End If

    If isObject( mAry2 ) Then
        For Each j In mAry2
            If isObject( mAry2(j) ) Then

                set retAry(j) = array_merge_recursive(retAry(j),mAry2(j))

            Elseif retAry.Exists(j) then
                retAry.Item(j) = array(retAry.Item(j) , mAry2(j))
            Else
                retAry.Add j, mAry2(j)
            End If
        Next

    ElseIf isArray( mAry2 ) Then
        For j = 0 to uBound( mAry2 )
            if retAry.Exists(j) then
                retAry.Item(j) = array(retAry.Item(j) , mAry2(j))
            Else
                retAry.Add j, mAry2(j)
            End If
        Next
    End If

    set array_merge_recursive = retAry

End Function

引数

mAry1 = array マージするもとの配列。
mAry2 = array 再帰的にマージしていく配列。

戻り値

すべての引数の配列をマージした結果の配列を返します。

処理

・ 一つ以上の配列の要素をマージし、 前の配列の最後にもう一つの配列の値を追加します。
・ マージした後の配列を返します。
・ 入力配列が同じ文字列のキーを有している場合、 これらのキーの値は配列に一つのマージされます。
・ これは再帰的に行われます。
・ このため、値の一つが配列自体を指している場合、 この関数は別の配列の対応するエントリもマージします。
・ しかし、配列が同じ数値キーを有している場合、 後の値は元の値を上書せず、追加されます。

その他の PHP array 関数