我很新,你会看到的。我想创建以下变量:
V1
=我的查询中的第1个字词V2
=我的查询中的第2个字词我可以静态地这样做:
<cfset V1=#qryGetWords["WordName"][1]#>
<cfset V2=#qryGetWords["WordName"][2]#>
<cfset V3=#qryGetWords["WordName"][3]#>
<cfset V4=#qryGetWords["WordName"][4]#>
但我想动态地做。我已经看到了其他答案,但我也无法让他们工作。可以通过调整语法来完成以下任何工作吗?
<cfloop query="qryGetWords" index="i">
<cfset "V#i#" = #qryGetWords["WordName"]["i"]#>
</cfloop>
我可以在cfloop中没有索引和查询吗?
答案 0 :(得分:5)
由于您使用的是query loop,因此您已经可以访问内置索引,即query.currentRow
。与cfoutput标记一样:
当您指定查询属性时,此标记会循环查询行....它还会将query.currentRow变量设置为正在处理的当前行。
示例:强>
<cfloop query="qryGetWords">
<!--- within the loop, you could also use the shortcut: qryGetWords.WordName --->
<cfset variables["V"& currentRow] = qryGetWords["WordName"][currentRow]>
</cfloop>
<强>更新强>
虽然这回答了提出的问题,Dan's answer提出了一个很好的观点。它可能不是存储信息的最佳方式。如果您详细说明您的总体目标,我们可以建议一种可能更灵活的方法。
答案 1 :(得分:2)
<cfloop query="qryGetWords">
<cfset "V#qryGetWords.currentRow#" = qryGetWords.WordName>
</cfloop>
注意:在qryGetWords.
中使用cfloop query=
是可选的。你可以省略它,它仍然可以工作。有些人喜欢用它,有些则不喜欢。那是你的选择。
或
<cfloop from="1" to="#qryGetWords.recordCount#" index="i">
<cfset "V#i#" = qryGetWords.WordName[i]>
</cfloop>
答案 2 :(得分:1)
如果您需要循环覆盖它们或稍后通过索引引用,则可以考虑使用数组
如果是,那么你可以像这样构建数组
<cfset words = [] />
<cfloop query="queryname">
<cfset arrayappend(words, queryname.wordname) />
</cfloop>
或通过列表的内部功能
<cfset words = listtoarray(valuelist(queryname.wordname)) />
如果内容可能包含逗号,那么必须使用您选择的另一个分隔符(新行chr(10)可能最安全,虽然我经常使用管道“|”,cf喜欢字符分隔的字符串)
<cfset words = listtoarray(valuelist(queryname.wordname, chr(10)), chr(10)) />
那么你可以静静地引用
<cfif something eq words[3]>
#blah#
</cfif>
或动态如此(或者在新版本上可能更容易,我仍然在CF8上)
<cfloop from="1" to="#arraylen(words)#" index="i">
<cfoutput><div>#i#: #words[i]#</div>
</cfloop>
这也允许您一次性转储所有单词,并使用动态生成的变量名称/ structkeys无法实现对数组的操作