获取变量数量的正确方法是什么

时间:2015-08-27 20:43:43

标签: coldfusion

假设我有一个具有未确定数值的表单,其名称如下:

PARAM1VCHRNAME
PARAM2VCHRNAME
PARAM3VCHRNAME
...

我希望使用本文所述的引用命名来循环使用这些命名:http://www.bennadel.com/blog/152-dynamic-coldfusion-variables-via-quoted-naming.htm

但为了做到这一点,我需要找到有多少这些项目才能设置我的循环。

我过去遇到过这种情况,我能想到的唯一方法就是将一些javascript写入一个隐藏的字段到表单中,其中有多少项。但这是一个混乱的解决方案,因为如果用户点击后退按钮,它会搞砸。我确信必须有一种方法可以在服务器端执行此操作。

谢谢

@kevin

好的,我写了一个东西来循环表单字段名称并过滤它们。不是我写过的最漂亮的代码。但它的确有效。谢谢你的帮助。

<cfset totalParams = 0>
<cfloop index="i" list="#Form.FieldNames#" delimiters=",">
     <cfif LEFT(i,5) eq 'PARAM' AND 
           RIGHT(i,8) eq 'VCHRNAME' AND 
           LSParseNumber(Replace(Replace(i, 'PARAM',''),'VCHRNAME','')) gt totalParams>
           <cfset totalParams = LSParseNumber(Replace(Replace(i, 'PARAM',''),'VCHRNAME',''))>
     </cfif>
</cfloop>

1 个答案:

答案 0 :(得分:1)

如果模式为PARAM#i#VCHRNAME并且序列始终以1开始且连续,则可以尝试连续循环,直到找不到FORM范围内的字段名称:< / p>

function findLastVchrname()
{
  var i=1;
  while (structKeyExists(FORM, 'PARAM#i#VCHRNAME'))
    i++;

  return i;
}

如果系列不连续,那么您需要遍历form.fieldnames并计算其中有多少人使用reFind()

传递正则表达式"^PARAM(\d)+VCHRNAME$"

或者如果您想要花哨,请在form.fieldNames上尝试listFilter(),使用过滤器函数确定它是否与模式匹配,然后对结果执行listLen()

如果您使用CF11并且也想要更加特别,请尝试将上述逻辑重构为ListReduce()

相关问题