开发人员指南的第 116 页说“与 cfloop 标记不同,CFScript for-in 循环不提供对查询和列表循环的内置支持。”
问:如何使用 ColdFusion 9 中的新脚本语法循环列表?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
开发人员指南的第 116 页说“与 cfloop 标记不同,CFScript for-in 循环不提供对查询和列表循环的内置支持。”
问:如何使用 ColdFusion 9 中的新脚本语法循环列表?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
您也可以尝试 listToArray,然后在 CF9 中为数组使用 for-in 构造:
<cfscript>
aCol = listToArray (qry.ColumnList);
for( fieldName in aCol ){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
<cfscript>
var i = 0;
var l = ListLen(qry.Columnlist);
var FieldName = "";
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = ListGetAt(qry.Columnlist, i);
form[FieldName] = qry[FieldName][1];
}
</cfscript>
上面的编辑更好(对于非常重的循环,可能更快一些)版本:
<cfscript>
var i = 0;
var Fields = ListToArray(qry.Columnlist);
var FieldName = "";
var l = arrayLen(Fields);
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = Fields[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
我会先把列表变成一个数组。 ListGetAt()
在循环中被调用 n 次效率不高。 ArrayLen()
但是应该很快。
<cfscript>
arr = ListToArray(qry.Columnlist);
for (i = 1; i <= ArrayLen(arr); i++)
{
fieldName = arr[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>