Forms 与structValue的StructKeyList()等效
Forms 与structValue的StructKeyList()等效,forms,coldfusion,coldfusion-2016,Forms,Coldfusion,Coldfusion 2016,StructKeyList()将为我提供以逗号分隔的结构键列表。现在我需要用逗号分隔结构值。现在,这就是我为获得价值所做的 <cfloop collection="#form#" item="key" > #form[key]#, </cfloop> #格式[键]#, 如何在没有循环的情况下从struct获取值列表?提前谢谢。我仔细检查了你的问题。据我所知,不可能在单个函数中获得结构中的值列表。我们必须循环该键并获得每个键的值。但我可以给出一个解决方案来获取
StructKeyList()
将为我提供以逗号分隔的结构键列表。现在我需要用逗号分隔结构值。现在,这就是我为获得价值所做的
<cfloop collection="#form#" item="key" >
#form[key]#,
</cfloop>
#格式[键]#,
如何在没有循环的情况下从struct获取值列表?提前谢谢。我仔细检查了你的问题。据我所知,不可能在单个函数中获得结构中的值列表。我们必须循环该键并获得每个键的值。但我可以给出一个解决方案来获取以逗号分隔的结构值
<cfset strNew = {"a":"10","b":20,"c":30}>
这里strNew是我的示例结构
<cfset myList = ''>
<cfloop collection="#strNew#" item="key" >
<cfset myList = listappend(myList,structfind(strNew,key))>
</cfloop>
<cfdump var="#myList#" />
在这里,我循环了结构键,找到了一个特定键的值,并使用listappend和structfind函数将其附加到和列表中
因此,您不需要在逗号(,)的末尾添加类似于#结构[key]#的内容,它还添加了key的最后一个值。例如,您的代码应该返回10,20,30
所以你没必要这样做。使用structfind和listappend还可以避免逗号结尾。希望对你有帮助 由于您使用的是CF2016,如果您想避免循环,您可以始终使用一个高阶函数,如
reduce()
这将获取窗体
作用域(formscope
)的结构,并使用reduce()
逐步遍历它,并将其分解为单个值(即转换为数组的结构值)。然后我们将返回的数组放入一个列表中
writeDump( fields.toList() )
我的完整测试代码在
formScope={
空1:“”,
fieldl:“text1”,
字段2:“文本2”,
清空2:“”,
字段3:“文本3”,
字段4:“文本4”,
空3:“
} ;
fields=formScope?.reduce(函数(结果、键、值){
len(值)?result.append(值):“”;
返回结果;
}, [] ) ;
WriteMap(字段?.toList()?:“表单不存在。”);
给我们:text2、text3、text4、text1
formScope
是我的表单字段的模拟版本,将传递到此页面。我主要使用StructReduce
、ArrayAppend
和ArrayList
的成员函数版本。我还使用initialVal
可选参数将还原的结果
值初始化为数组。在数组中插入一行之前,我检查该值是否有长度(如果需要,我也可以修剪),以便从最终列表中删除空元素。我还使用安全导航操作符(?。
)进行一些基本验证,以确保元素存在(如表单未通过或缩减产生无效结果),并使其更具抗错误性
注:我相信当引入ArrayReduce
时,可以将其恢复为与CF11兼容
如果您知道密钥的名称,只需从中提取值即可。类似于
form.myfieldname
。我不明白为什么循环是个问题。还有,你的总体目标是什么?显然,您正在遍历表单字段列表,但为什么?也许有更好的方法来解决您的更大问题。@Shawn我有动态表单数据要用mysql插入。所以我想知道是否有一个函数可以直接用于我的insert
查询。现在我正在处理INSERT-INTO
student`(#ListQualify(StructKeyList(form),“”))值(#ListQualify(val,”))对于这样的方案,我会非常小心SQL注入。从表单值直接将数据插入数据库通常不是一个好主意。所谓“动态表单数据”,是指表单提交中可能存在或不存在的字段列表,字段名称是动态生成的还是其他?
writeDump( fields.toList() )
<cfscript>
formScope = {
empty1 : "" ,
fieldl : "text1" ,
field2 : "text2" ,
empty2 : "" ,
field3 : "text3" ,
field4 : "text4" ,
empty3 : ""
} ;
fields = formScope?.reduce( function(result, key, value) {
len(value) ? result.append(value) : "" ;
return result ;
}, [] ) ;
writeDump( fields?.toList() ?: "Form doesn't exist." ) ;
</cfscript>