Динамический массив сессий удалить конкретный элемент - PullRequest
1 голос
/ 07 декабря 2011

Итак, я пытаюсь удалить определенный элемент из моего динамического массива сеансов.Мой текущий массив удаляет неправильный элемент и оставляет элемент, от которого я хочу избавиться

sku = "the_item_value"
sessionArray = session("cart")
Dim length : length = Ubound(sessionArray)
sessionArray(length-1)=sku
ReDim Preserve sessionArray(length-1)
session("cart") = sessionArray

Так что это мой текущий код, он удаляет один элемент из моего массива сеанса.Тем не менее, он не удаляет элемент "sku", он удаляет случайный элемент.

Ответы [ 2 ]

4 голосов
/ 07 декабря 2011

Логика в вашем примере кода делает следующее:

  1. Заменяет второй на последний элемент на sku.

    sessionArray(length-1)=sku

  2. Удаляет последний элемент.

    ReDim Preserve sessionArray(length-1)

Это явно не то, что вы хотите. Вместо этого вам нужна логика, чтобы найти предмет sku, а затем избавиться от него.

Если порядок предметов не имеет значения, вы можете сделать что-то вроде этого:

Sub RemoveArrayItem(array, item)
    ' Find item
    For i = LBound(array) To UBound(array)-1
        If array(i) = item Then
            ' Replace the item with last item
            array(i) = array(UBound(array))
            Exit For
        End If
    Next

    ' Remove the last item which is either a duplicate or it is the item
    ' (assuming that the item is definitely in the array)
    ReDim Preserve array(UBound(array)-1)
End Sub

sku = "the_item_value"
sessionArray = session("cart")

RemoveArrayItem sessionArray, sku

session("cart") = sessionArray
1 голос
/ 08 декабря 2011

Если вы хотите исключить элемент (ы), используя значение, вы должны использовать функцию Filter .Посмотри:

Dim myArray, sku, myFilteredArray
sku = "the_item_value"
myArray = Array("other", "other", "other", sku)
Response.Write "Original:<br />" & Join(myArray, "<br />") 'check original
myFilteredArray = Filter(myArray, sku, False, vbBinaryCompare)
Response.Write "<hr />"
Response.Write "Excluded:<br />" & Join(myFilteredArray, "<br />") 'check filtered
...