0

我正在使用 Array 来存储请求的信息。在请求中的某个时刻,他们可以从中添加或删除信息。

删除按钮将索引传递到找到 ArrayDeleteAt() 逻辑的页面。

在页面中,它具有以下代码:

<cfif (isDefined('form.deleteIndex'))>
<cfset temp = arrayDeleteAt(session.Request,form.deleteIndex)>
</cfif>

删除第一项时,它不会从 Array 中删除 Struct,但会清除它的值。删除任何其他项目时都很好,但我无法从数组中删除空的。

创建数组:

<CFSET VarArrayLen = ArrayLen(session.ord)>
<CFSET VARDuplicatedItem = "False">
<cfloop index="i" from="1" to="#VarArrayLen#">
    <CFIF session.ord[i].ITEMID eq ITEMID >
        <CFSET VARDuplicatedItem = "TRUE">
    </CFIF>
</CFLOOP>
<CFIF VARDUPLICATEItem eq "False">
    <cfset temp = arrayAppend(session.ord,StructNew())>
    <cfset session.ord[arraylen(session.ord)].ITEMID = ITEMID>
    <cfset session.ord[arraylen(session.ord)].ITEMDETAILS = ITEMDETAILS>
    <cfset session.ord[arraylen(session.ord)].FullRequestDetails = FullRequestDetails>
</CFIF> 

允许用户从数组中添加或删除的一页:

<CFSET VarArrayLen = ArrayLen(session.ord)>
<table>
    <cfloop index="i" from="1" to="#VarArrayLen#">
        <CFIF ArrayIsDefined(session.ord,i) eq true>
            <tr>
                <cfform action="ActionPage.cfm" method="post">
                    <td>
                        <input type="hidden" value="#i#" name="del" />
                        <input type="image" src="/images/stop.gif" width="8" alt="delete this item" />
                    </td>
                </cfform>
            </tr>
        </CFIF>
    </CFLOOP>
</table>

在删除项目的页面上:

<cfif (isDefined('form.del'))>
    <cfset temp = arrayDeleteAt(session.ord,form.del)>
</cfif>

这就是所有的代码。

在 Session 中,它仍然显示 Array 中所有值都为空的一项。

它始终是保留在数组中的第一个要删除的项目,其余的都可以正常删除。

4

1 回答 1

0

我试图将您的问题提取到一个独立的测试用例中,但我无法使用 CF10 重现您的问题。

<cfset session.orders = [{item='blah',qty=1},{item='blah2',qty=2}]>

<cfdump var="#session.orders#" format="text"
        label="before arrayDeleteAt(session.orders, 1)">

<cfset arrayDeleteAt(session.orders,1)>

<cfdump var="#session.orders#" format="text"
        label="after arrayDeleteAt(session.orders, 1)">

输出:

before arrayDeleteAt(session.orders, 1) - array - Top 2 of 2 rows

1) [struct]
    ITEM: blah
    QTY: 1 
2) [struct]
    ITEM: blah2
    QTY: 2 
after arrayDeleteAt(session.orders, 1) - array - Top 1 of 1 rows

1) [struct]
    ITEM: blah2
    QTY: 2
于 2013-07-17T18:53:06.177 回答