我在ASP中有这个数组
CONST CARTPID = 0
CONST CARTPRICE = 1
CONST CARTPQUANTITY = 2
dim localCart(3,20)
我像这样
动态地向这个数组中添加项目localCart(CARTPID,i) = productId
localCart(CARTPRICE,i) = productPrice
localCart(CARTPQUANTITY,i) = 1
问题是,在4个项目之后,我仍然可以添加项目,但UBound总是返回3.这导致我的条件失败。
我想在运行时增加此数组的大小,以便UBOUND可以返回最新值。
请让我知道我该怎么做。这是我的完整代码
'Define constants
CONST CARTPID = 0
CONST CARTPRICE = 1
CONST CARTPQUANTITY = 2
'Get the shopping cart.
if not isArray(session("cart")) then
dim localCart(3,20)
else
localCart = session("cart")
end if
'Get product information
productID = trim(request.QueryString("productid"))
productPrice = trim(request.QueryString("price"))
'Add item to the cart
if productID <> "" then
foundIt = false
for i = 0 to ubound(localCart)
if localCart(CARTPID,i) = productId then
localCart(CARTPQUANTITY,i) = localCart(CARTPQUANTITY,i)+1
foundIt = true
exit for
end if
next
if not foundIt then
for i = 0 to 20
if localCart(CARTPID,i) = "" then
***ReDim Preserve localCart(UBound(localCart, 1) + 1,20)***
localCart(CARTPID,i) = productId
localCart(CARTPRICE,i) = productPrice
localCart(CARTPQUANTITY,i) = 1
exit for
end if
next
end if
end if
答案 0 :(得分:5)
如果您在循环中动态添加项目,则需要使用Redim Preserve()
语句。您需要使用Preserve
部分,这样您就不会丢失任何现有数据。
否则,如果您使用数组数据然后将其重新设置为另一组数据,则只需Redim()
语句
以下是使用Redim()
/ Redim Prevserve()
声明的良好参考:http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html
答案 1 :(得分:1)
第一个维度的长度仅为3,而第二个维度为20.如果您想要第二个维度的UBound,请执行以下操作:
UBound(localCart, 2)
返回20.您应该能够将其与ReDim Preserve结合使用。
答案 2 :(得分:0)
我认为在每次添加新项目后使用当前UBound + 1重新编辑数组将使UBound最终为您提供最新值。
// New item addition code will go here
ReDim localCart(UBound(localCart, 1) + 1,20)
因此,每次添加新项目时,它都会使用新大小更新数组。