Looping über Listen in CF9
-
19-09-2019 - |
Frage
Seite 116 des Führers Entwickler sagt "Im Gegensatz zu dem cfloop Tag, CFScript for-Schleifen in bietet keine integrierte Unterstützung für Schleifen über Abfragen und Listen."
F: Wie kann ich eine Schleife über eine Liste der neuen Skriptsyntax in Coldfusion 9
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
Lösung
Sie können auch die listToArray versuchen und dann für Arrays in CF9 konstruieren die für in Verwendung:
<cfscript>
aCol = listToArray (qry.ColumnList);
for( fieldName in aCol ){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
Andere Tipps
<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>
EDIT Nicer (vielleicht ein noch etwas schneller, für wirklich schwere Schleifen) Version der obigen:
<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>
Ich würde die Liste in ein Array drehen zuerst. ListGetAt()
ist nicht effizient zu n-mal in einer Schleife aufgerufen werden. ArrayLen()
sollte jedoch ziemlich schnell sein.
<cfscript>
arr = ListToArray(qry.Columnlist);
for (i = 1; i <= ArrayLen(arr); i++)
{
fieldName = arr[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow