12

開発者ガイドの116ページには、「cfloopタグとは異なり、CFScript for-inループは、クエリとリストをループするための組み込みサポートを提供していません」と記載されています。

Q:ColdFusion 9の新しいスクリプト構文を使用してリストをループするにはどうすればよいですか?

<cfloop list="#qry.Columnlist#" index="FieldName">
   <cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
4

3 に答える 3

18

listToArrayを試してから、CF9の配列のfor-in構文を次のように使用することもできます。

<cfscript>
aCol = listToArray (qry.ColumnList);

for( fieldName in aCol ){
    form[fieldName]  = qry[fieldName][1];
}

</cfscript>
于 2011-03-29T14:38:51.890 に答える
12
<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>
于 2010-01-07T14:14:35.860 に答える
5

最初にリストを配列に変換します。 ListGetAt()ループ内でn回呼び出されるのは効率的ではありません。 ArrayLen()ただし、かなり高速である必要があります。

<cfscript>
arr = ListToArray(qry.Columnlist);

for (i = 1; i <= ArrayLen(arr); i++)
{
    fieldName = arr[i];
    form[FieldName] = qry[FieldName][1];
}
</cfscript>
于 2010-01-07T19:37:20.977 に答える