【发布时间】:2009-07-07 15:32:56
【问题描述】:
我有以下数组。
<cfset ItemHasUsers = arrayNew(1)>
<cfloop query="qReadData">
<cfset ItemHasUsers[qReadData.currentrow]["ID"] = qReadData.ID >
<cfset ItemHasUsers[qReadData.currentrow]["Asset"] = qReadData.COUNTOFITEMS >
</cfloop>
我从我的数据库中获取了一些记录,我将它们放入一个表中并通过一个表单进行操作。
<form action="same-site.cfm method="post">
<table>
<tr>
<th>ID</th>
<th>Asset</th>
<th>Delete</th>
<tr>
<cfset ItemHasUsers = Item.getItemHasUsers() >
<cfoutput>
<cfloop index="i" from="1" to="#arrayLen(ItemHasUsers)#">
<td>#ItemHasUsers[i]["ID"]#</td>
<td><input type="text" name="upd_#ItemHasUsers[i]["ID"]#" maxlength="6" size="6" value="#ItemHasUsers[i]["Asset"]#"></td>
<td><input type="checkbox" name="del_#ItemHasUsers[i]["ID"]#"></td>
</tr>
</cfloop>
</cfouput>
</table>
<input type="submit" value="OK">
</form>
取决于我的输入,我想更新我的数据库。 目前我循环遍历表单结构以清除我要删除的用户。看起来很难看,但我不知道更好的方法 -> 观看初学者标签;)
<cfset ItemHasUsers = Item.getItemHasUsers() >
<cfloop collection="#form#" item="key">
<cfif left(key,len("DEL_")) eq ("DEL_")>
<cfset Id = listLast(key,"_") >
<cfloop index="i" from="1" to="#arrayLen(ItemHasUsers)#">
<cfif ItemHasUsers[i]["ID"] eq Id>
<cfset structClear(ItemHasUsers[i]) >
</cfif>
</cfloop>
</cfif>
</cfloop>
<cfset ItemHasUsers = Item.getItemHasUsers() >
<cfloop index="i" from="1" to="#arrayLen(ItemHasUsers)#">
<cfif ItemHasUsers[i]["ID"] eq Id>
<cfset arrayDeleteAt(ItemHasUsers,i) >
</cfif>
</cfloop>
这仅在我检查输入表单中的最后一个元素是否删除时才有效。如果我检查任何其他我得到以下错误
找不到数组变量“ITEMHASUSERS”的第 1 维位置 3 的元素。
好的,arrayDeleteAt 调整数组大小并自动删除间隙。如何更新下一次迭代的循环长度?
【问题讨论】:
-
我不确定 ItemHasUsers 的用途。你为什么要经历所有这些麻烦来构建这个数据结构?例如,在您注意到其中一项已设置为“DEL”之后,您将如何处理它? 再次循环它以从数据库中删除该项目?
-
我有一个数据对象,它有字段(它的 id、它的名字)和一个数组。在每个数组位置中,我创建一个包含与数据对象相关的数据的结构(以获取具有命名索引的关联数组而不是二维数组)。在我的代码中,来自数据库的唯一商品或文章由不同的用户出售,其中每个人都拥有所述商品的不同资产。如果我更改某些内容并想要保存更改,则数据对象是我在将其数据写回数据库之前对该项目的临时存储。
标签: arrays coldfusion loops