حلقات على القوائم في CF9
-
19-09-2019 - |
سؤال
Page 116 من دليل المطور يقول "على عكس علامة Cfloop، لا توفر CFScript for-in-in-in في الدعم المدمج للاحتياج حول الاستعلامات والقوائم."
س: كيف يمكنني حلقة عبر قائمة باستخدام بناء جملة البرنامج النصي الجديد في ColdFusion 9؟
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
المحلول
يمكنك أيضا تجربة ListtoArray ثم استخدم "إنشاء" للحصول على صفائف في CF9 ك:
<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>
لا تنتمي إلى StackOverflow