Перебирая списки в cf9 - PullRequest
       28

Перебирая списки в cf9

12 голосов
/ 07 января 2010

Страница 116 руководства разработчика гласит: «В отличие от тега cfloop, циклы for-in CFScript не предоставляют встроенную поддержку для циклического выполнения запросов и списков».

В: Как выполнить цикл посписок с использованием нового синтаксиса сценария в ColdFusion 9?

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

Ответы [ 3 ]

19 голосов
/ 29 марта 2011

Вы также можете попробовать listToArray, а затем использовать конструкцию for-in для массивов в CF9 как:

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

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

</cfscript>
12 голосов
/ 07 января 2010
<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>

РЕДАКТИРОВАТЬ Nicer (возможно, даже немного быстрее, для действительно тяжелых петель) версия выше:

<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>
5 голосов
/ 07 января 2010

Я бы сначала превратил список в массив. ListGetAt() неэффективно вызывать n раз в цикле. ArrayLen() однако должно быть довольно быстро.

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

for (i = 1; i <= ArrayLen(arr); i++)
{
    fieldName = arr[i];
    form[FieldName] = qry[FieldName][1];
}
</cfscript>
...